VisualStudio/C#

[C#] List<T> LINQ 모음

usingsystem 2023. 9. 21. 09:55
728x90

1. Take

 

List에서 index 0부터 원하는 count만큼 객체를 반환한다 이때 ListCount보다 찾고자 하는 Count가 클 경우 오류가 발생하지 않고 List가 반환된다.

아래 예제는 0번인덱스 부터 0~1 2개의 객체를 반환하라는 뜻이다.

    static void Main(string[] args)
    {
        List<int> testList = new List<int>()
        {
            1,2,3,4,5
        };

        List<int> taskList = testList.Take(2).ToList();
        foreach (var item in taskList)
            Console.WriteLine(item);
    }

2. Skip

List에서 원하는 index부터 끝까지 객체를 반환한다.

아래 예제는 3번 index 부터 나머지 모든 객체를 반환한다. 

    static void Main(string[] args)
    {
        List<int> testList = new List<int>()
        {
            1,2,3,4,5
        };

        List<int> skipList = testList.Skip(3).ToList();
        foreach (var item in skipList)
            Console.WriteLine(item);
    }

3. TakeWhile

TakeWhile은 데이터 집합의 데이터를 처음 위치에서 순회하며 순회하는 동안 조건문의 결과가 false일 경우 반복문을 중단하고 조건에 충족되었던 데이터를 반환한다.

Where문과 다른점은 Where문은 조건에 만족하는 모든 객체를 반환한다. 즉 조건문 결과가 false일 경우 반복문을 중단하지 않고 계속해서 순회한다.

 

    static void Main(string[] args)
    {
        List<int> testList = new List<int>()
        {
            1,2,3,4,5
        };

        List<int> takeWhileList = testList.TakeWhile(t=> t<3).ToList();
        foreach (var item in takeWhileList)
            Console.WriteLine(item);
    }

 

4. Last

Last는 LINQ (Language Integrated Query)의 한 부분으로, 시퀀스의 마지막 요소를 반환하는 메서드입니다. Last 메서드는 시퀀스의 끝에서부터 역순으로 검색하여 처음으로 일치하는 요소를 찾아 반환합니다. 만약 일치하는 요소가 없을 경우에는 예외가 발생합니다.

    static void Main()
    {
        List<int> numbers = new List<int> { 1, 2, 3, 4, 5 };

        // 마지막 요소 가져오기
        int lastNumber = numbers.Last();
        Console.WriteLine("마지막 요소: " + lastNumber);

        // 조건을 만족하는 마지막 요소 가져오기
        int lastEvenNumber = numbers.Last(x => x % 2 == 0);
        Console.WriteLine("마지막 짝수: " + lastEvenNumber);
    }

 

5. SequenceEqual

SequenceEqual 메서드는 두 시퀀스가 서로 동일한 요소 순서와 값으로 구성되어 있는지를 확인하는 LINQ 메서드입니다. 이 메서드는 시퀀스 간의 일치 여부를 확인하고, 만약 두 시퀀스가 동일하다면 true를 반환하며, 그렇지 않으면 false를 반환합니다.

  • 사용 시점: 두 시퀀스 전체가 정확히 일치하는지 비교할 때 사용합니다.
  • 장점: 두 시퀀스의 모든 요소가 순서대로 동일한 경우 true를 반환하고, 그렇지 않은 경우 false를 반환합니다.
  • 단점: 두 시퀀스의 길이가 다르면 무조건 false를 반환하며, 요소의 순서에 민감합니다.
    static void Main()
    {
        int[] array1 = { 1, 2, 3, 4, 5 };
        int[] array2 = { 1, 2, 3, 4, 5 };

        bool areEqual = array1.SequenceEqual(array2);

        if (areEqual)
        {
            Console.WriteLine("두 시퀀스는 동일합니다.");
        }
        else
        {
            Console.WriteLine("두 시퀀스는 동일하지 않습니다.");
        }
    }

 

6. ElementAt

ElementAt 메서드는 시퀀스에서 지정된 인덱스 위치에 있는 요소를 반환하는 LINQ 메서드입니다. 이 메서드를 사용하여 시퀀스의 특정 위치에 있는 요소를 가져올 수 있습니다.

ElementAt 메서드는 시퀀스의 길이보다 큰 인덱스를 지정하면 ArgumentOutOfRangeException 예외가 발생합니다. 따라서 사용 전에 인덱스가 시퀀스의 범위 내에 있는지 확인하는 것이 좋습니다.

    static void Main()
    {
        string[] colors = { "Red", "Green", "Blue", "Yellow" };

        // 인덱스 2에 있는 요소 가져오기
        string colorAtIndex2 = colors.ElementAt(2);

        Console.WriteLine("인덱스 2에 있는 요소: " + colorAtIndex2);
    }

7. First

First 메서드는 LINQ에서 사용되는 메서드 중 하나로, 시퀀스의 첫 번째 요소를 반환합니다. 이 메서드는 시퀀스가 비어있지 않은 경우에는 첫 번째 요소를 반환하며, 시퀀스가 비어있는 경우에는 예외를 발생시킵니다.

    static void Main()
    {
        List<int> numbers = new List<int> { 1, 2, 3, 4, 5 };

        // 첫 번째 요소 가져오기
        int firstNumber = numbers.First();
        Console.WriteLine("첫 번째 요소: " + firstNumber);

        // 조건을 만족하는 첫 번째 요소 가져오기
        int firstEvenNumber = numbers.First(x => x % 2 == 0);
        Console.WriteLine("첫 번째 짝수: " + firstEvenNumber);
    }

8.Zip

Zip은 LINQ에서 제공하는 메서드 중 하나로, 두 개의 시퀀스를 쌍으로 묶어 새로운 시퀀스를 생성하는 역할을 합니다. 각 쌍은 두 시퀀스에서 동일한 인덱스 위치에 있는 요소끼리 생성됩니다.

C#에서 Zip 메서드는 다음과 같은 형태를 가지고 있습니다:

  • first: 첫 번째 시퀀스입니다.
  • second: 두 번째 시퀀스입니다.
  • resultSelector: 각 쌍의 요소에 대해 결과를 생성하는 함수입니다.
  • 사용 시점: 두 시퀀스를 쌍으로 묶어 요소별로 비교 또는 변환할 때 사용합니다.
  • 장점: 요소별로 특정 동작을 수행할 수 있으며, 두 시퀀스의 길이가 다르더라도 동작합니다.
  • 단점: 직접 구현해야 하며, 두 시퀀스의 길이가 다를 때 어떻게 처리할지에 대한 로직이 필요합니다.

Zip 메서드는 두 시퀀스 중 더 짧은 길이를 가진 시퀀스까지만 쌍을 생성하며, 긴 시퀀스의 추가 요소는 무시됩니다.

    static void Main()
    {
        int[] numbers1 = { 1, 2, 3, 4 };
        string[] words = { "one", "two", "three" };

        // 두 시퀀스를 쌍으로 묶어 문자열 배열 생성
        var zipped = numbers1.Zip(words, (num, word) => $"{num} - {word}");

        foreach (var item in zipped)
        {
            Console.WriteLine(item);
        }
    }

 

728x90