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);
}
}
'VisualStudio > C#' 카테고리의 다른 글
[C#] 데이터베이스 종류 (0) | 2023.11.08 |
---|---|
[C#] Google Protobuf형식 기반 ProtoBuff-net 사용 방법 (0) | 2023.11.02 |
[C#] Enum타입 리플렉션(Reflection)사용하여 값 받아오는 방법 (0) | 2023.02.16 |
[C#] Byte와 문자열간 변환 방법과 인코딩 방식 설명 (0) | 2023.02.09 |
[C#] Struct를 byte로 변환, byte를 Struct로 변환 (0) | 2023.02.02 |