IEnumerable
의 순서 목록을 취하고 첫 번째 요소 다음에 두 번째 요소 등을 순서대로 생성하는 간단한 IEnumerable
을 반환하는 간단한 기본 제공 방법이 있습니까?C#에서 IEnumerables 체인?
필자는 필자 자신 만의 글을 쓸 수는 있었지만 필자는 먼저이 유용한 작업을 수행하기위한 방법이 이미 있었는지 알고 싶었습니다.
IEnumerable
의 순서 목록을 취하고 첫 번째 요소 다음에 두 번째 요소 등을 순서대로 생성하는 간단한 IEnumerable
을 반환하는 간단한 기본 제공 방법이 있습니까?C#에서 IEnumerables 체인?
필자는 필자 자신 만의 글을 쓸 수는 있었지만 필자는 먼저이 유용한 작업을 수행하기위한 방법이 이미 있었는지 알고 싶었습니다.
SelectMany를 사용해보십시오.
IEnumerable<int> Collapse(IEnumerable<IEnumerable<int>> e){
return e.SelectMany(x => x);
}
이 함수의 목적은 T를 IEnumerable < >으로는 IEnumerable <를 IEnumerable <T> > 그룹을 평탄화하는 것이다. 반환 된 데이터는 원래의 순서를 보존합니다. - JaredPar의 (올바른) 대답 또한
또한 구문 쿼리 다음 (올바른) LINQ 기반의 답변에 추가
var all = from inner in outer
from item in inner
select item;
...
당신이 LINQ를 사용하지 않으려면,
public class ChainedEnumerable<T> : IEnumerable<T>
{
private readonly IEnumerable<T>[] _inners;
public ChainedEnumerable(params IEnumerable<T>[] inners)
{
_inners = inners;
}
public IEnumerator<T> GetEnumerator()
{
foreach (IEnumerable<T> inner in _inners)
{
foreach (T t in inner)
{
yield return t;
}
}
}
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
}
이처럼 사용 :
당신은 수율을 사용하여 ChainedEnumerable 클래스를 발명 할 수210
+1 이것은 멋지고 깔끔한 해결책입니다. 나는 그것을 내 물건 속에 넣을 것이라고 믿는다! –