두 세트의 datarow가 있습니다. 그들은 각각 IEnumerable입니다. 이 두 목록을 하나의 목록에 추가/연결하려고합니다. 나는 이것이 가능하다고 확신한다. for 루프를 수행하고 싶지 않고 두 목록에 Union 메서드와 Join 메서드가 있음을 알았습니다. 어떤 아이디어?두 개의 IEnumerable 시퀀스 추가/연결
답변
개체의 유형이 동일하다고 가정하면 Union
또는 Concat
을 사용할 수 있습니다. SQL UNION
키워드와 마찬가지로 Union
연산을 사용하면 중복이 제거되고 Concat
(예 : UNION ALL
)과 같이 두 번째 목록이 첫 번째 끝에 추가됩니다. 서로 다른 유형의 경우
IEnumerable<T> first = ...;
IEnumerable<T> second = ...;
IEnumerable<T> combined = first.Concat(second);
또는
IEnumerable<T> combined = first.Union(second);
는, 당신은 일반적인 무언가로 Select
해야합니다. 예를 들어
IEnumerable<TOne> first = ...;
IEnumerable<TTwo> second = ...;
IEnumerable<T> combined = first.Select(f => ConvertToT(f)).Concat(
second.Select(s => ConvertToT(s)));
어디 ConvertToT(TOne f)
및 ConvertToT(TTwo s)
든 T
의 인스턴스로 TOne
(및 TTwo
각각)의 인스턴스로 변환하는 동작을 나타낸다.
방금 여러 시퀀스를 연결해야하는 비슷한 상황이 발생했습니다.
자연스럽게 Google/StackOverflow에서 기존 솔루션을 검색했지만 열거 형을 평가하지 않은 항목을 찾지 못했습니다 (예 : 배열로 변환 한 다음 Array.Copy()
등을 사용하여 ConcatMultiple
이라는 확장명과 정적 유틸리티 메서드를 작성했습니다.
희망 사항은 동일한 작업을 수행해야하는 사용자에게 도움이되기를 바랍니다.
/// <summary>
/// Concatenates multiple sequences
/// </summary>
/// <typeparam name="TSource">The type of the elements of the input sequences.</typeparam>
/// <param name="first">The first sequence to concatenate.</param>
/// <param name="source">The other sequences to concatenate.</param>
/// <returns></returns>
public static IEnumerable<TSource> ConcatMultiple<TSource>(this IEnumerable<TSource> first, params IEnumerable<TSource>[] source)
{
if (first == null)
throw new ArgumentNullException("first");
if (source.Any(x => (x == null)))
throw new ArgumentNullException("source");
return ConcatIterator<TSource>(source);
}
private static IEnumerable<TSource> ConcatIterator<TSource>(IEnumerable<TSource> first, params IEnumerable<TSource>[] source)
{
foreach (var iteratorVariable in first)
yield return iteratorVariable;
foreach (var enumerable in source)
{
foreach (var iteratorVariable in enumerable)
yield return iteratorVariable;
}
}
/// <summary>
/// Concatenates multiple sequences
/// </summary>
/// <typeparam name="TSource">The type of the elements of the input sequences.</typeparam>
/// <param name="source">The sequences to concatenate.</param>
/// <returns></returns>
public static IEnumerable<TSource> ConcatMultiple<TSource>(params IEnumerable<TSource>[] source)
{
if (source.Any(x => (x == null)))
throw new ArgumentNullException("source");
return ConcatIterator<TSource>(source);
}
private static IEnumerable<TSource> ConcatIterator<TSource>(params IEnumerable<TSource>[] source)
{
foreach (var enumerable in source)
{
foreach (var iteratorVariable in enumerable)
yield return iteratorVariable;
}
}
Join 방법은 목록이 교차 조건에 따라 참조되는 SQL 조인처럼, 그것은 문자열 연결 또는 목록에 추가되지 않습니다. Union 메서드는 Concat 메서드와 마찬가지로 원하는대로 처리하지만 모두 LAZY 평가이며 매개 변수가 null이 아니도록 요구합니다. ConcatIterator 또는 UnionIterator를 반환하고 if called repeatedly this could cause problems을 반환합니다. 열망하는 평가 결과가 다른 행동으로 나타나면 원하는대로 선택하면 다음과 같은 확장 방법을 사용할 수 있습니다.
public static IEnumerable<T> myEagerConcat<T>(this IEnumerable<T> first,
IEnumerable<T> second)
{
return (first ?? Enumerable.Empty<T>()).Concat(
(second ?? Enumerable.Empty<T>())).ToList();
}
- 1. 순서대로 두 개의 jqgrid를로드하십시오 (시퀀스 아약스 호출)
- 2. 두 개의 바이너리 파일에서 일치하는 시퀀스 찾기
- 3. 두 개의 IEnumerable 객체를 동시에 반복 처리 할 수 있습니까?
- 4. LINQ에서 두 개의 IEnumerable 델타를 가져올 수 있습니까?
- 5. iPhone SDK : 무작위로 재생되는 두 개의 애니메이션 시퀀스 * 도움말 *
- 6. 나는 두 가지 기능이를 IEnumerable
- 7. 두 오디오 시퀀스 간의 지각 적 유사성
- 8. 두 개의 IEnumerable 메서드를 구성 할 때 C# iterator가 두 번 실행됩니다.
- 9. 두 개의 partialviews 및 두 개의 모델로보기
- 10. 시퀀스 필드, 기본 키/시퀀스 쌍에 대한 개별 시퀀스 추적
- 11. 두 개의 인터페이스를 구현했는지 또는하지 않았습니까?
- 12. 두 개의 다른 제네릭 인터페이스를 구현하는 C# #
- 13. LINQ의 빈 시퀀스
- 14. .NET에서 두 개의 IEnumerable <T> 세트의 상대적인 보수를 결정하십시오.
- 15. IEnumerable <T> in OCaml
- 16. 두 개의 서로 다른 두 개의 div에서 OnClick
- 17. 두 개의 서로 다른 관계가있는 두 개의 리소스가 있습니다.
- 18. 두 개의 쿼리와 두 개의 내부 조인이 있습니다.
- 19. 두 개의 다른 페이지에 두 개의 텍스트 상자가 있습니다.
- 20. 두 개의 유사한 객체에 대해 두 개의 개별 테이블을 만들어야합니까?
- 21. 젠드에서 두 개의 다른 프로젝트에서 두 개의 라이브러리 사용하기
- 22. 두 개의 iterable에서 사전 생성 및 두 개의 소비 모두
- 23. SQL 쿼리 두 개의 필드가 나는 두 개의 테이블이있는 테이블
- 24. 두 개의 이미지 버튼 또는 두 개의 제출물
- 25. 두 개의 SQL 조인, 두 개의 다른 결과
- 26. X 코드 : 두 개의 대상, 두 개의 기본 파일?
- 27. 두 개의 날짜 필드에 두 개의 날짜 매개 변수가있는 조건
- 28. Cakephp 두 개의 서로 다른 위치/도메인에있는 두 개의 데이터베이스
- 29. SQL - 두 개의 테이블
- 30. 최대 두 개의 숫자
동일한 유형의 데이터row 세트가 있습니까? 다른 유형? – Oded
@Obed .... 그들은 같은 타입이다 – MikeTWebb