본문 바로가기
C#/Enumerable (Linq)

[C#] Linq (Enumerable 클래스)

by 스누누피 2024. 7. 23.

최근 수정: 2024.12.13

Enumerable 클래스 내용 중 새로 알게되거나 사용했던 메서드들 기록하는 곳입니다.

 

Enumerable 클래스

Enumerable 클래스는 LINQ의 일부로 IEnumerable 인터페이스를 구현하는 컬렉션 클래스에 대한 LINQ 기능을 제공한다.

 

시퀀스

시퀀스는 순서가 있는 일련의 데이터를 나타내는 추상적인 개념

주요메서드

  • Range([시작 인덱스], [길이]) : 일정한 숫자 범위의 시퀀스를 만든다. 첫번째 매개변수가 시작 숫자이고, 두번째 매개 변수는 생성하려는 시퀀스의 길이 이다.
var sequence = Enumerable.Range(0, 10);
foreach(var num in sequence)
{
    Console.Write(num); // 0123456789
}

 

  • Repeat([정수], [반복할 횟수]) : 첫번째 매개변수로 받은 정수를 두번째 매개변수로 받은 수만큼 반복한 시퀀스를 반환한다.
int[] arr = Enumerable.Repeat(3, 3).ToArray();
Console.WriteLine(string.Join(",", arr)); // 3, 3, 3

 

  • ToArray() : 시퀀스를 배열로 만들어준다. 시퀀스를 메서드를 통해 조작해준 뒤 마지막으로 ToArray() 메서드를 사용하면 배열로 반환할 수 있다.
var sequence = Enumerable.Range(1, 9);
int[] odd = sequence.Where(num => num % 2 == 1).ToArray(); // where메서드로 반환된 시퀀스를 배열로

foreach(int num in odd)
{
    Console.Write(num); // 13579
}

 

  • Sum() :시퀀스 내부의 숫자들의 합을 반환해 준다.
int sum = Enumerable.Range(1, 5).Sum(); // 1+2+3+4+5
Console.WriteLine(sum); // 15

 

  • Reverse() : 시퀀스를 반대로 뒤집어 준다.
int[] answer = Enumerable.Range(3, 8).Reverse().ToArray();

foreach(int i in answer)
    Console.Write(i + " "); // 10 9 8 7 6 5 4 3

 

  • Skip([스킵할 개수]) : 매개변수로 받은 수 만큼 스킵하고 시퀀스를 반환한다.
int[] arr = { 1, 2, 3, 4, 5, 6 };

int[] skipArr = arr.Skip(2).ToArray();

Console.WriteLine(string.Join(", ", skipArr)); // 3, 4, 5, 6

 

  • Take([가져올 개수]) : 처음부터 매개변수로 받은 수 만큼 시퀀스를 반환한다.
int[] arr = { 1, 2, 3, 4, 5, 6 };

int[] skipArr = arr.Take(2).ToArray();

Console.WriteLine(string.Join(", ", skipArr)); // 1, 2

 

  • SequenceEqual([비교할 시퀀스]) : 시퀀스의 크기와 각 인덱스별 요소가 전부 일치하는지 여부를 반환해준다.
int[] arr1 = { 1, 2, 3, 4, 5 };
int[] arr2 = { 0, 1, 2, 3, 4 };
int[] arr3 = { 1, 2, 3, 4, 5 };

Console.WriteLine(arr1.SequenceEqual(arr2)); // False
Console.WriteLine(arr1.SequenceEqual(arr3)); // True

 

  • Except([제외할 값이 담긴 시퀀스]) : 시퀀스에 담긴 값을 제외한 시퀀스를 반환해준다.
int[] arr = { 0, 1, 2, 3, 4, 5 };
int[] delete_list = { 1, 3, 5 };

int[] exceptArr = arr.Except(delete_list).ToArray();

Console.WriteLine(string.Join(",", exceptArr)); // 0,2,4

 

  • Average() : 시퀀스에 담긴 요소들의 평균을 반환해준다.
int[] arr = { 1, 2, 3, 4 };

Console.WriteLine(arr.Average()); // 2.5

 

  • ElementAt(index) : 해당 인덱스 요소를 반환한다.
int[] arr = { 4, 21, 27, 32, 47, 11 };

// arr를 오름차순으로 정렬 후 index 2에 해당하는 요소 반환
int num = arr.OrderBy(o => o).ElementAt(2);

Console.WriteLine(num); // 21

 

  • Distinct() : 시퀀스 내부의 중복 값을 제거한 시퀀스를 반환한다.
int[] arr = { 1, 2, 2, 3, 3, 3, 4, 4, 4, 4 };

arr = arr.Distinct().ToArray();

Console.WriteLine(string.Join(",", arr)); // 1,2,3,4

 

  • FirstOrDefault() : 시퀀스 내부 값 중 가장 첫번째 값 혹은 값이 없으면 기본값을 반환한다.
  • LastOrDefault() : 시퀀스 내부 값 중 가장 마지막 값 혹은 값이 없으면 기본값을 반환한다.
string[] strArr = { "a", "1", "가" };
int[] intArr = new int[] { };

string str1 = strArr.FirstOrDefault();
int i1 = intArr.FirstOrDefault();

string str2 = strArr.LastOrDefault();
int i2 = intArr.LastOrDefault();

Console.WriteLine(str1); // a
Console.WriteLine(i1); // 0 

Console.WriteLine(str2); // 가
Console.WriteLine(i2); // 0

// intArray의 기본값은 0
// stringArray의 기본값은 ""

 

  • Union(): 두 시퀀스를 중복이 생기지 않게 합쳐준다.
int[] arr = { 1, 2, 3, 4, 5 };
int[] arr2 = { 1, 3, 5, 7, 9 };

arr = arr.Union(arr2).ToArray();
Console.WriteLine(string.Join(", ", arr)); // 1, 2, 3, 4, 5, 7, 9

'C# > Enumerable (Linq)' 카테고리의 다른 글

[C#] OfType<T>() vs CAST<T>()  (0) 2024.12.19
[C#] Enumerable.Union() 메서드  (0) 2024.12.13
[C#] Enumerable.FirstOrDefault() 메서드  (0) 2024.12.10
[C#] Linq (람다식 메서드)  (0) 2024.11.05