4

私は多次元リストを持っています:

    List<string>[] list = new List<string>[2];
    list[0] = new List<string>();
    list[1] = new List<string>();

そして、次のようにリストを反復処理しますが、これは 1 つのリストのみを反復処理します。

foreach (String str in dbConnectObject.Select()[0])
{
   Console.WriteLine(str);
}

私は次のようなことができるようにしたいが:

foreach (String str in dbConnectObject.Select()[0] & String str2 in dbConnectObject.Select()[1])
{
   Console.WriteLine(str + str2);
}
4

4 に答える 4

6

リストが同じサイズの場合は、次を使用できますEnumerable.Zip

foreach (var p in dbConnectObject.Select()[0].Zip(dbConnectObject.Select()[1], (a,b) => new {First = a, Second = b})) {
    Console.Writeline("{0} {1}", p.First, p.Second);
}
于 2012-07-08T12:04:02.433 に答える
2

IEnumerable<T>.Union(IEnumerable<T>)2 つのリストを順番に繰り返し処理する場合は、拡張メソッドを使用できます。

IEnumerable<string> union = list[0].Union(list[1]);

foreach(string str int union)
{
     DoSomething(str);
}

組み合わせのマトリックスが必要な場合は、リストを結合できます。

var joined = from str1 in list[0]
             from str2 in list[1]
             select new { str1, str2};


foreach(var combination in joined)
{
    //DoSomethingWith(combination.str1, combination.str2);
    Console.WriteLine(str + str2);
}
于 2012-07-08T12:05:14.873 に答える
0

次のコードを試すことができます。サイズが異なる場合にも機能します。

for (int i = 0; i < list[0].Count; i++)
{
    var str0 = list[0][i];
    Console.WriteLine(str0);
    if (list[1].Count > i)
    {
        var str1 = list[1][i];
        Console.WriteLine(str1);
    }
}
于 2012-07-08T12:07:23.217 に答える
-1

代わりにLINQを使用してください。

foreach (var s in list.SelectMany(l => l)) { Console.WriteLine(s); }

于 2012-07-08T12:07:27.343 に答える