두 개의 IEnumberable을 새로운 IEnumberable 로 연결하는 방법은 무엇입니까?
두 가지 예가 있습니다.IEnumerable<T>
(동일하게)T
. 의 새 인스턴스를 원합니다.IEnumerable<T>
둘 다 연결되어 있습니다.
에 기본 제공 방법이 있습니까?그러기 위해서는 NET 아니면 제가 직접 작성해야 합니까?
예, LINQ to Objects는 다음을 통해 이 기능을 지원합니다.
var together = first.Concat(second);
NB: 그래야 합니다.first
또는second
null입니다. 당신은 a를 받을 것입니다.ArgumentNullException
이를 방지하고 빈 집합처럼 null을 처리하려면 다음과 같이 null 병합 연산자를 사용합니다.
var together = (first ?? Enumerable.Empty<string>()).Concat(second ?? Enumerable.Empty<string>()); //amending `<string>` to the appropriate type
그Concat
메소드는 구현하는 객체를 반환합니다.IEnumerable<T>
두 개의 전달된 열거형 항목(A 및 B라고 함)을 순차적으로 사용하려는 개체(Cat이라고 함)를 반환합니다.전달된 열거형이 Cat의 수명 동안 변경되지 않고 부작용 없이 읽을 수 있는 시퀀스를 나타내는 경우 Cat을 직접 사용할 수 있습니다.그렇지 않으면, 전화를 하는 것이 좋을 수도 있습니다.ToList()
에Cat
그리고 결과를 사용합니다.List<T>
(A 및 B 내용의 스냅샷을 나타냅니다.)
일부 열거형은 열거형이 시작될 때 스냅샷을 생성하며 열거형 중에 컬렉션이 수정되면 해당 스냅샷의 데이터를 반환합니다.B가 이처럼 열거 가능한 경우 Cat이 A의 끝에 도달하기 전에 발생하는 B의 변경 사항은 Cat의 열거에 표시되지만 그 이후에 발생하는 변경 사항은 표시되지 않습니다.이러한 의미론은 혼란스러울 수 있습니다. Cat의 스냅샷을 만들면 이러한 문제를 피할 수 있습니다.
솔루션에 아래 코드를 사용할 수 있습니다.
public void Linq94()
{
int[] numbersA = { 0, 2, 4, 5, 6, 8, 9 };
int[] numbersB = { 1, 3, 5, 7, 8 };
var allNumbers = numbersA.Concat(numbersB);
Console.WriteLine("All numbers from both arrays:");
foreach (var n in allNumbers)
{
Console.WriteLine(n);
}
}
이 게시물이 비교적 오래된 게시물인 것은 알지만, 여러 IEnumberable의 게시물을 연결하려면 다음을 사용합니다.
var joinedSel = new[] { first, second, third }.Where(x => x != null).SelectMany(x => x);
이렇게 하면 null IE numberable이 제거되고 여러 연결이 가능합니다.
크레이그 1231의 답변을 바탕으로 확장 방법을 몇 가지 만들었습니다.
public static IEnumerable<T> JoinLists<T>(this IEnumerable<T> list1, IEnumerable<T> list2)
{
var joined = new[] { list1, list2 }.Where(x => x != null).SelectMany(x => x);
return joined ?? Enumerable.Empty<T>();
}
public static IEnumerable<T> JoinLists<T>(this IEnumerable<T> list1, IEnumerable<T> list2, IEnumerable<T> list3)
{
var joined = new[] { list1, list2, list3 }.Where(x => x != null).SelectMany(x => x);
return joined ?? Enumerable.Empty<T>();
}
public static IEnumerable<T> JoinMany<T>(params IEnumerable<T>[] array)
{
var final = array.Where(x => x != null).SelectMany(x => x);
return final ?? Enumerable.Empty<T>();
}
// The answer that I was looking for when searching
public void Answer()
{
IEnumerable<YourClass> first = this.GetFirstIEnumerableList();
// Assign to empty list so we can use later
IEnumerable<YourClass> second = new List<YourClass>();
if (IwantToUseSecondList)
{
second = this.GetSecondIEnumerableList();
}
IEnumerable<SchemapassgruppData> concatedList = first.Concat(second);
}
언급URL : https://stackoverflow.com/questions/14164974/how-to-concatenate-two-ienumerablet-into-a-new-ienumerablet
'programing' 카테고리의 다른 글
보호하다.리버스 엔지니어링의 NET 코드? (0) | 2023.05.11 |
---|---|
기존 Git 분기 추적을 원격 분기로 설정하시겠습니까? (0) | 2023.05.11 |
NgModule에서 선언, 제공자 및 가져오기의 차이점은 무엇입니까? (0) | 2023.05.11 |
서버에 연결할 수 없음: dial tcp [:1]:8080:connectex: 대상 컴퓨터가 이를 적극적으로 거부했기 때문에 연결할 수 없습니다. (0) | 2023.05.11 |
Mongoose 암호 해싱 (0) | 2023.05.11 |