programing

두 개의 IEnumberable을 새로운 IEnumberable로 연결하는 방법은 무엇입니까?

abcjava 2023. 5. 11. 21:02
반응형

두 개의 IEnumberable을 새로운 IEnumberable로 연결하는 방법은 무엇입니까?

두 가지 예가 있습니다.IEnumerable<T>(동일하게)T. 의 새 인스턴스를 원합니다.IEnumerable<T>둘 다 연결되어 있습니다.

에 기본 제공 방법이 있습니까?그러기 위해서는 NET 아니면 제가 직접 작성해야 합니까?

예, LINQ to Objects는 다음을 통해 이 기능을 지원합니다.

var together = first.Concat(second);

NB: 그래야 합니다.first또는secondnull입니다. 당신은 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

반응형