在C#中链接IEnumerables?
是否有一种简单的内置方法来获取一个有序的在C#中链接IEnumerables?,c#,iterator,ienumerable,C#,Iterator,Ienumerable,是否有一种简单的内置方法来获取一个有序的IEnumerables列表,并返回一个IEnumerable,该列表按顺序生成第一个、第二个中的所有元素,依此类推 我当然可以写我自己的,但我想知道,在我做这项看似有用的任务之前,是否已经有办法完成它。试试SelectMany IEnumerable<int> Collapse(IEnumerable<IEnumerable<int>> e){ return e.SelectMany(x => x ); }
IEnumerable
s列表,并返回一个IEnumerable
,该列表按顺序生成第一个、第二个中的所有元素,依此类推
我当然可以写我自己的,但我想知道,在我做这项看似有用的任务之前,是否已经有办法完成它。试试SelectMany
IEnumerable<int> Collapse(IEnumerable<IEnumerable<int>> e){
return e.SelectMany(x => x );
}
IEnumerable折叠(IEnumerable e){
返回e.SelectMany(x=>x);
}
此函数的目的是将一组IEnumerable展平为IEnumerable。返回的数据将保留原始顺序 关于JaredPar(正确)的回答,另请参见查询语法:
var all = from inner in outer
from item in inner
select item;
除了(正确的)基于LINQ的答案
如果不想使用LINQ,可以使用yield发明ChainedEnumerable类:
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:IEnumerable
{
私有只读IEnumerable[]\u inners;
public ChainedEnumerable(params IEnumerable[]inners)
{
_inners=inners;
}
公共IEnumerator GetEnumerator()
{
foreach(IEnumerable inner in_inner)
{
foreach(T在内部)
{
收益率t;
}
}
}
IEnumerator IEnumerable.GetEnumerator()
{
返回GetEnumerator();
}
}
像这样使用它:
List<string> a = new List<string> { "A1", "A2", "A3" };
List<string> b = new List<string> { "B1", "B2", "B3" };
ChainedEnumerable<string> chainedEnumerable =
new ChainedEnumerable<string>(a, b);
foreach (string s in chainedEnumerable)
Console.WriteLine(s);
List a=新列表{“A1”、“A2”、“A3”};
列表b=新列表{“B1”、“B2”、“B3”};
ChainedEnumerable ChainedEnumerable=
新链式可数(a,b);
foreach(chainedEnumerable中的字符串s)
控制台。写入线(s);
+1这是一个很好且整洁的解决方案。我相信我会把它融入我的东西里!