본문 바로가기
코딩강좌/LINQ

LINQ - ToList, ToArray, ToDictionary, ToLookup 알아보기

by 대디동동 2023. 12. 29.
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 방법에 대해서 알아 보았다.

위 순서대로 사용 빈도가 가장 높으니 활용 방법을 반드시 익혀 두길 추천한다.

 

반응형