19

s の順序付けられたリストを取得し、最初のすべての要素、次に 2 番目などのすべての要素を順番に生成IEnumerableするシングルを返す簡単な組み込みの方法はありますか。IEnumerable

もちろん、自分で書くこともできますが、この一見便利なタスクを実行する前に、それを実行する方法が既にあるかどうかを知りたかったのです。

4

3 に答える 3

24

SelectMany を試してください。

IEnumerable<int> Collapse(IEnumerable<IEnumerable<int>> e){
 return e.SelectMany(x => x );
}

この関数の目的は、IEnumerable<IEnumerable<T>> のグループを IEnumerable<T> にフラット化することです。返されたデータは元の順序を保持します。

于 2009-02-08T18:22:12.130 に答える
15

JaredParの(正しい)回答に加えて、クエリ構文も:

var all = from inner in outer
          from item in inner
          select item;
于 2009-02-08T18:24:26.553 に答える
13

(正しい)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);
于 2009-02-08T18:34:54.927 に答える