1

正しい出力のコード例を次に示します

アイデアは、6行が必要です。列の数は気にしません。IEnumerable は私の列です。最初の行に各 IEnumerable の最初の値を保持したいと思います。2 番目の行は 2 番目などを保持します。IEnumerable/列に十分な値がない場合は、プレースホルダーとして -1 を入れます。

このコードはそれを行いますが、この方法で実装するのではなく、使用できるlinqステートメントがあると確信しています。linqを使用してこれを行う方法はありますか?

var mydata = new IEnumerable<int>[] { Enumerable.Range(2, 3), Enumerable.Range(5, 5), Enumerable.Range(7, 6), Enumerable.Range(3, 2) };
var temp = new List<int>[6];
for (int i = 0; i < 6; ++i)
    temp[i] = new List<int>();
foreach (var v in mydata)
{
    var len = v.Count();
    int i;
    for (i = 0; i < 6&&i<len; ++i)
    {
        temp[i].Add(v.ElementAt(i));
    }
    for (; i < 6; ++i)
        temp[i].Add(-1);
}
foreach (var outer in temp)
{
    foreach (var inner in outer)
    {
        Console.WriteLine(inner);
    }
    Console.WriteLine("---");
}
4

2 に答える 2

1

1 行で記述できますが、読みにくくなります。

var temp = Enumerable
    .Range(0, 6)
    .Select(i => mydata.Select(v 
        => i < v.Count() ? v.ElementAt(i) : -1).ToList())
    .ToArray();
于 2013-08-13T22:49:13.640 に答える