728x90
LINQ 쿼리문은 foreach 루프를 사용할 경우 실행된다고 설명했다.
하지만, foreach 루프를 실행하지 않고 결과를 저장해주는 메서드가 있는데
ToList, ToArray, ToDictionary, ToLoopup 이 해당된다.
이번 시간에는 LINQ에서 사용 빈도가 높은 위 메서드에 대해서 설명하겠으니
끝까지 읽고 초보 개발자에게 많은 도움이 되었으면 한다.
모든 코딩과 개발이 그렇듯이 눈으로 보고 이해하여도 실제 타이핑을 해야 실력이 향상되니 꼭 실습하길 바랍니다.
ToList, ToArray, ToDictionary, ToLookup 알아보기
1. ToList
LINQ 쿼리 결과를 List 형태로 만들어 준다.
//문자열 형태의 배열 생성
string[] fruits = { "apple", "passionfruit", "banana", "mango", "orange", "blueberry", "grape", "strawberry" };
//해당 배열의 글자수를 구하여 List 형태로 메모리에 저장
List<int> lengths = fruits.Select(fruit => fruit.Length).ToList();
//List 반복하여 결과값 출력
foreach (int length in lengths)
{
System.Diagnostics.Debug.WriteLine(length);
}
//결과값
5
12
6
5
6
9
5
10
2. ToArray
LINQ 쿼리 결과를 Array 형태로 만들어 준다.
//Exam Class 과목, 점수로 구성
public class Exam
{
public string Subject { get; set; }
public int Point { get; set; }
}
//List 형태로 추가
List<Exam> exams = new List<Exam>();
exams.Add(new Exam { Subject = "국어", Point = 100 });
exams.Add(new Exam { Subject = "영어", Point = 95 });
exams.Add(new Exam { Subject = "수학", Point = 85 });
exams.Add(new Exam { Subject = "과학", Point = 80 });
exams.Add(new Exam { Subject = "체육", Point = 95 });
//LINQ를 사용하여 과목만 Array 형태로 메모리에 저장
string[] subjects = exams.Select(x => x.Subject).ToArray();
//결과값 출력
foreach (string subject in subjects)
{
System.Diagnostics.Debug.WriteLine(subject);
}
//결과값
국어
영어
수학
과학
체육
3. ToDictionary
LINQ 쿼리 결과를 Key, Value 형태로 만들어 준다.
public class Exam
{
public string Subject { get; set; }
public int Point { get; set; }
public int Index { get; set; }
}
List<Exam> exams = new List<Exam>();
exams.Add(new Exam { Subject = "국어", Point = 100, Index = 1 });
exams.Add(new Exam { Subject = "영어", Point = 95, Index = 2 });
exams.Add(new Exam { Subject = "수학", Point = 85, Index = 3 });
exams.Add(new Exam { Subject = "과학", Point = 80, Index = 4 });
exams.Add(new Exam { Subject = "체육", Point = 95, Index = 5 });
exams.Add(new Exam { Subject = "국어", Point = 95, Index = 6 });
exams.Add(new Exam { Subject = "영어", Point = 80, Index = 7 });
exams.Add(new Exam { Subject = "수학", Point = 80, Index = 8 });
exams.Add(new Exam { Subject = "과학", Point = 90, Index = 9 });
exams.Add(new Exam { Subject = "체육", Point = 75, Index = 10 });
//Dictionary 두 번째 parameter에 해당 Class가 선언되어야 한다.
Dictionary<int, Exam> dictionary = exams.ToDictionary(x => x.Index);
//KeyValuePair 두 번째 parameter에 해당 Class가 선언되어야 한다.
foreach (KeyValuePair<int, Exam> kvp in dictionary)
{
System.Diagnostics.Debug.WriteLine(
"Key {0}: 과목 {1}, 점수 {2} ",
kvp.Key,
kvp.Value.Subject,
kvp.Value.Point);
}
//결과값
Key 1: 과목 국어, 점수 100
Key 2: 과목 영어, 점수 95
Key 3: 과목 수학, 점수 85
Key 4: 과목 과학, 점수 80
Key 5: 과목 체육, 점수 95
Key 6: 과목 국어, 점수 95
Key 7: 과목 영어, 점수 80
Key 8: 과목 수학, 점수 80
Key 9: 과목 과학, 점수 90
Key 10: 과목 체육, 점수 75
4. ToLookup
Lookup<TKey,TElement>을 사용하여 제네릭 IEnumerable<T>을 만든다.
ToLookup은 ToList, ToArray, ToDictionary에 비해서 많이 활용되지 않으니 그냥 참고만 하면 된다.
public class Exam
{
public string Subject { get; set; }
public int Point { get; set; }
public int Index { get; set; }
}
List<Exam> exams = new List<Exam>();
exams.Add(new Exam { Subject = "국어", Point = 100, Index = 1 });
exams.Add(new Exam { Subject = "영어", Point = 95, Index = 2 });
exams.Add(new Exam { Subject = "수학", Point = 85, Index = 3 });
exams.Add(new Exam { Subject = "과학", Point = 80, Index = 4 });
exams.Add(new Exam { Subject = "체육", Point = 95, Index = 5 });
exams.Add(new Exam { Subject = "국어", Point = 95, Index = 6 });
exams.Add(new Exam { Subject = "영어", Point = 80, Index = 7 });
exams.Add(new Exam { Subject = "수학", Point = 80, Index = 8 });
exams.Add(new Exam { Subject = "과학", Point = 90, Index = 9 });
exams.Add(new Exam { Subject = "체육", Point = 75, Index = 10 });
ILookup<char, string> lookup = exams.ToLookup(x => x.Subject[0], x => x.Subject + " " + x.Point);
foreach (IGrouping<char, string> packageGroup in lookup)
{
System.Diagnostics.Debug.WriteLine(packageGroup.Key);
foreach (string str in packageGroup)
{
System.Diagnostics.Debug.WriteLine(string.Format(" {0}", str));
}
}
//결과값
국
국어 100
국어 95
영
영어 95
영어 80
수
수학 85
수학 80
과
과학 80
과학 90
체
체육 95
체육 75
이번 시간에는 LINQ에서 가장 많이 활용되는
ToList, ToArray, ToDictionary, ToLookup 방법에 대해서 알아 보았다.
위 순서대로 사용 빈도가 가장 높으니 활용 방법을 반드시 익혀 두길 추천한다.
반응형
'코딩강좌 > LINQ' 카테고리의 다른 글
LINQ Query 강좌 - from, select, group, let, join (0) | 2023.11.16 |
---|---|
LINQ Query Expression (쿼리 식), 쿼리 변수 배우기 (0) | 2023.11.13 |
LINQ 쿼리(Query)란? - SQL 인 듯 아닌 듯, 개념부터 알아가기 (1) | 2023.11.09 |
C#의 핵심은 LINQ입니다. LINQ 알아보기 (0) | 2023.11.07 |