Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 윈도우폰7
- 거제도
- 윈도우모바일
- 데브피아
- 소년포비
- 옴니아2
- 윈모데브
- 스마트폰
- windows mobile 6.5
- 윈도우 모바일
- 윈도우폰
- 황광진
- 서진호
- 헤이맨
- 신석현
- winmodev
- 쉐어포인트코리아
- 실버라이트 코리아
- 지승욱
- 훈스닷넷
- 소년포비소프트
- UX베이커리
- 안드로이드
- MIX10
- 윈도데브
- 마이크로소프트
- 신동혁
- 주신영
- 김춘배
- 루나네스
Archives
- Today
- Total
소년포비의 세계정복!!
[스크랩] LINQ 로 LIST 제네릭과 DICTIONARY 로 차집합 구해보기 본문
MSDN 을 찾아보면 두개의 TXT 파일에 문자열이 다른 부분을 찾는 설명이 존재합니다.
자세히 내용을 살펴보면...
static void Main() { // Create the IEnumerable data sources. string[] names1 = System.IO.File.ReadAllLines(@"../../../names1.txt"); string[] names2 = System.IO.File.ReadAllLines(@"../../../names2.txt"); // Create the query. Note that method syntax must be used here. IEnumerable<string> differenceQuery = names1.Except(names2); // Execute the query. Console.WriteLine("The following lines are in names1.txt but not names2.txt"); foreach (string s in differenceQuery) Console.WriteLine(s); // Keep the console window open in debug mode. Console.WriteLine("Press any key to exit"); Console.ReadKey();
}
LINQ를 사용하여 문자열의 두 목록을 비교하고 names1.txt에 있지만 names2.txt에는 없는 해당 줄을 출력하는 방법을 보여 줍니다.
이번에는 LIST 제네릭과 DICTIONARY 객체에서도 이런 차집합 데이터를 어떻게 추출하는지 확인해 보겠습니다.
static void Main(string[] args)
{
List<string> names = new List<string>
{ "심재운", "이유진", "권판진", "이현수", "양경욱" };
Dictionary<string, string> visiting = new Dictionary<string, string>()
{ { "심재운", "Turkey" }, { "이유진", "Germany" }, { "권판진", "Bangalore" } };
var minus =
from n in names
let places = from p in visiting select p.Key
where !places.Contains(n)
select n;
foreach (var v in minus)
Console.WriteLine(v);
Console.ReadKey();
}
where 절 - 이 조건에 맞는 항목만 출력한다 orderby 절 - 결과셋의 출력순서를 지정한다. 디폴트는 오름차순이고 내림차순을 원할?는 끝에 descending 붙여야 한다. let 절 - 결과셋을 가공하여 임시변수에 저장하는 역할을 한다. 쿼리문 내에서 임시로 사용할 변수가 필요할때 let문으로 변수를 선언하고 이후 출력이나 조건, 점검 등에 이 변수를 활용할수 있다.
위의 결과값은 ...
이현수
양경욱
여기서 주목할 것은 SQL 의 IN 쿼리 처럼 LINQ 에는 Contains 함수를 이용하여 이를 포함하고 있지 않은 대상자를 minus 객체에
할당을 합니다.
그리고 출력은 간단히 foreach 구문을 이용해서 출력을 합니다.
=========== 참 고 =============
Figure A 연산자의 범주
연산자 | 설명 |
집계 | |
Aggregate | 시퀀스에 대해 사용자 지정 메서드 수행 |
Average | 숫자 값 시퀀스의 평균 계산 |
Count | 시퀀스에 있는 항목의 수를 int로 반환 |
LongCount | 시퀀스에 있는 항목의 수를 long으로 반환 |
Min | 숫자 시퀀스의 최소 숫자를 검색 |
Max | 숫자 시퀀스의 최대 숫자를 검색 |
Sum | 시퀀스의 수 합계 계산 |
연결 | |
Concat | 두 시퀀스를 하나의 시퀀스로 연결 |
변환 | |
Cast | 시퀀스의 요소를 지정한 형식으로 캐스트 |
OfType | 시퀀스의 요소를 지정한 형식으로 필터링 |
ToArray | 시퀀스에서 배열 반환 |
ToDictionary | 시퀀스에서 사전 반환 |
ToList | 시퀀스에서 목록 반환 |
ToLookup | 시퀀스에서 조회 반환 |
ToSequence | IEnumerable 시퀀스 반환 |
요소 | |
DefaultIfEmpty | 빈 시퀀스에 대한 기본 요소 생성 |
ElementAt | 시퀀스의 지정한 색인에서 요소 반환 |
ElementAtOrDefault | 시퀀스의 지정한 색인에서 요소를 반환하거나 색인의 범위가 벗어난 경우 기본값 반환 |
First | 시퀀스의 첫 번째 요소 반환 |
FirstOrDefault | 시퀀스의 첫 번째 요소를 반환하거나 요소가 없는 경우 기본값 반환 |
Last | 시퀀스의 마지막 요소 반환 |
LastOrDefault | 시퀀스의 마지막 요소를 반환하거나 요소가 없는 경우 기본값 반환 |
Single | 시퀀스의 단일 요소 반환 |
SingleOrDefault | 시퀀스의 단일 요소를 반환하거나 요소가 없는 경우 기본값 반환 |
같은지 확인 | |
SequenceEqual | 두 시퀀스를 비교하여 동일한지 확인 |
생성 | |
Empty | 빈 시퀀스 생성 |
Range | 지정한 범위의 시퀀스 생성 |
Repeat | 지정한 횟수만큼 항목을 반복하여 시퀀스 생성 |
그룹화 | |
GroupBy | 지정한 그룹화로 시퀀스의 항목 그룹화 |
결합 | |
GroupJoin | 두 시퀀스에 대한 그룹 조인 수행 |
Join | 두 시퀀스에 대한 내부 조인 수행 |
정렬 | |
OrderBy | 값의 오름차순에 따라 시퀀스 정렬 |
OrderByDescending | 값의 내림차순에 따라 시퀀스 정렬 |
ThenBy | 이미 정렬된 시퀀스를 오름차순에 따라 정렬 |
ThenByDescending | 이미 정렬된 시퀀스를 내림차순에 따라 정렬 |
Reverse | 시퀀스의 항목을 반대로 정렬 |
분할 | |
Skip | 지정 횟수만큼 항목을 건너뛴 시퀀스 반환 |
SkipWhile | 식을 충족하지 못하는 항목을 건너뛴 시퀀스 반환 |
Take | 지정 횟수만큼 항목을 포함하는 시퀀스 반환 |
TakeWhile | 식을 충족하는 항목을 포함하는 시퀀스 반환 |
예측 | |
Select | 시퀀스의 일부를 예측 |
SelectMany | 시퀀스의 일부에 대한 일대다 예측 생성 |
한정자 | |
All | 시퀀스의 모든 항목이 조건을 충족하는지 확인 |
Any | 시퀀스에 조건을 충족하는 항목이 있는지 확인 |
Contains | 시퀀스에 지정한 항목이 포함되어 있는지 확인 |
제한 | |
Where | 시퀀스의 항목을 필터링 |
집합 | |
Distinct | 중복 항목이 없는 시퀀스 반환 |
Except | 두 시퀀스의 차집합을 나타내는 시퀀스 반환 |
Intersect | 두 시퀀스의 교집합을 나타내는 시퀀스 반환 |
Union | 두 시퀀스의 합집합을 나타내는 시퀀스 반환 [출처] 표준 쿼리 연산자와 LINQ |작성자 바이너리 |
감사합니다. posted by 심재운 (shimpark@gmail.com)
출처 : 닷넷 (.NET) 프로그래머 모임
글쓴이 : 심재운 원글보기
메모 :
'프로그램 세상 > C#' 카테고리의 다른 글
바인딩 가능한 객체 만들기 (0) | 2009.10.06 |
---|---|
비 동기 웹 서비스 호출(Asynchronous WebService) (0) | 2009.10.06 |
윈폼에서 선그리기 (0) | 2009.10.05 |
[C#]Listview 변경 추가, 삭제, 수정 및 사이즈 변경 (0) | 2009.10.02 |
[C#]트레이 아이콘 만들기 (0) | 2009.10.02 |