C # 목록 이해 소개
C #에서 목록 이해를 어떻게 수행 할 수 있습니까?
List Comprehension은 프로그래머가 집합의 구성원이 충족해야하는 속성을 설명 할 수있는 집합 표기법의 한 유형입니다. 일반적으로 기존 세트에 일부 유형의 조합, 변환 또는 축소 기능을 적용하여 다른, 이미 존재하는, 세트 또는 세트를 기반으로 세트를 생성하는 데 사용됩니다.
다음 문제를 고려하십시오. 0에서 9까지 10 개의 숫자 시퀀스가 있고 해당 시퀀스에서 모든 짝수를 추출해야합니다. C # 버전 1.1과 같은 언어에서는이 문제를 해결하기 위해 다음 코드에 거의 국한되었습니다.
ArrayList evens = new ArrayList();
ArrayList numbers = Range(10);
int size = numbers.Count;
int i = 0;
while (i < size)
{
if (i % 2 == 0)
{
evens.Add(i);
}
i++;
}
위의 코드는 아래의 전체 코드 목록에서 사용할 수있는 Range 함수의 구현을 보여주지 않습니다. C # 3.0 및 .NET Framework 3.5의 출현으로 이제 C # 프로그래머가 Linq를 기반으로하는 List Comprehension 표기법을 사용할 수 있습니다. 위의 C # 1.1 코드는 다음과 같이 C # 3.0으로 이식 할 수 있습니다.
IEnumerable<int> numbers = Enumerable.Range(0, 10);
var evens = from num in numbers where num % 2 == 0 select num;
기술적으로 말하면, 호출 이동 한 라이너로 기록 될 수 위의 C # 3.0 코드 Enumarable.Range (가) 생성의 LINQ 식에 고르게 시퀀스. C # List Comprehension 에서 해당 시퀀스에 함수 (모듈로 2)를 적용 하여 집합 번호 를 줄 입니다. 이것은 훨씬 더 간결한 방식으로 짝수 시퀀스를 생성하고 루프 구문을 사용하지 않습니다. 이제 스스로에게 물어볼 수 있습니다. 이것이 순전히 구문 설탕입니까? 잘 모르겠지만 확실히 조사하고 여기에서 직접 질문 할 수도 있습니다. 나는 이것이 단지 구문 설탕이 아니며 기본 모나드를 활용하여 수행 할 수있는 몇 가지 진정한 최적화가 있다고 생각합니다.
C #에서 목록 이해를 수행하는 방법을 찾고있을 때 이것을 발견했습니다 ...
누군가 list comprehensions를 말할 때 나는 즉시 Python에 대해 생각합니다. 아래 코드는 다음과 같은 목록을 생성합니다.
[0,2,4,6,8,10,12,14,16,18]
Python 방식은 다음과 같습니다.
list = [2*number for number in range(0,10)]
C #에서 :
var list2 = from number in Enumerable.Range(0, 10) select 2*number;
두 방법 모두 느리게 평가됩니다.
이안 P
return (from user in users
where user.Valid
select user.Name).ToArray();
LINQ를 사용하여 목록 이해와 유사한 식을 만들 수 있습니다. 다음은 이에 대해 설명하는 사이트입니다.
LINQ를 사용하여 C #의 List Comprehension
튜토리얼은 아니지만 개념을 설명하는 몇 가지 코드는 다음과 같습니다.
public List<string> ValidUsers(List<User> users) {
List<string> names = new List<string>();
foreach(User user in users) {
if(user.Valid) {
names.Add(user.Name);
}
}
return names;
}
참조 URL : https://stackoverflow.com/questions/130898/introduction-to-c-sharp-list-comprehensions
'programing' 카테고리의 다른 글
한 Git 저장소에서 다른 저장소로 커밋을 복사하는 방법은 무엇입니까? (0) | 2021.01.14 |
---|---|
Uglify 구문 오류 : 예기치 않은 토큰 : punc ()) (0) | 2021.01.14 |
.o 파일과 .a 파일 (0) | 2021.01.14 |
시스템 트레이에 Java 앱을 어떻게 넣습니까? (0) | 2021.01.14 |
교차 플랫폼 개행 문자와 일치하는 정규식 (0) | 2021.01.14 |