rec*_*ive 19 c# ienumerable iterator
是否有一个简单的内置方法来获取IEnumerables 的有序列表并返回一个单元IEnumerable,它按顺序产生第一个中的所有元素,然后是第二个,依此类推.
我当然可以写自己的,但我想知道在我做之前是否已经有办法完成这个看似有用的任务.
Jar*_*Par 24
试试SelectMany.
IEnumerable<int> Collapse(IEnumerable<IEnumerable<int>> e){
return e.SelectMany(x => x );
}
Run Code Online (Sandbox Code Playgroud)
此函数的目的是将一组IEnumerable <IEnumerable <T >>展平为IEnumerable <T>.返回的数据将保留原始订单.
Mar*_*ell 15
继JaredPar的(正确的)答案 - 还查询语法:
var all = from inner in outer
from item in inner
select item;
Run Code Online (Sandbox Code Playgroud)
Rog*_*mbe 12
进一步(正确的)基于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();
}
}
Run Code Online (Sandbox Code Playgroud)
像这样使用它:
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);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1958 次 |
| 最近记录: |