s の順序付けられたリストを取得し、最初のすべての要素、次に 2 番目などのすべての要素を順番に生成IEnumerable
するシングルを返す簡単な組み込みの方法はありますか。IEnumerable
もちろん、自分で書くこともできますが、この一見便利なタスクを実行する前に、それを実行する方法が既にあるかどうかを知りたかったのです。
s の順序付けられたリストを取得し、最初のすべての要素、次に 2 番目などのすべての要素を順番に生成IEnumerable
するシングルを返す簡単な組み込みの方法はありますか。IEnumerable
もちろん、自分で書くこともできますが、この一見便利なタスクを実行する前に、それを実行する方法が既にあるかどうかを知りたかったのです。
SelectMany を試してください。
IEnumerable<int> Collapse(IEnumerable<IEnumerable<int>> e){
return e.SelectMany(x => x );
}
この関数の目的は、IEnumerable<IEnumerable<T>> のグループを IEnumerable<T> にフラット化することです。返されたデータは元の順序を保持します。
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();
}
}
次のように使用します。
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);