LINQselectから多次元配列の特定の次元にデータを入力したいと思います。ループは明らかな方法ですが、「ベストプラクティス」の提案が必要です。
たとえば、これを挿入するための最良の方法は次のとおりです。
this.Facts.Select(f =>f.FactIc).ToArray()
これは、longの配列をこの配列の2番目の次元に返します。
long[,] vals = new long[1, factCount];
LINQselectから多次元配列の特定の次元にデータを入力したいと思います。ループは明らかな方法ですが、「ベストプラクティス」の提案が必要です。
たとえば、これを挿入するための最良の方法は次のとおりです。
this.Facts.Select(f =>f.FactIc).ToArray()
これは、longの配列をこの配列の2番目の次元に返します。
long[,] vals = new long[1, factCount];
配列の配列はどうですか?1行全体の内容を頻繁に置き換える必要がある場合は、各行自体を配列にする必要があります。行データを含む独自のクラスを定義してから、そのクラスの配列を定義することもできます。
ところで、なぜToList()とToArray()があるのですか?
編集:結果が2D配列でなければならないと仮定すると、以下のバージョンのforeachを使用します。
ForEachを次のように定義します(これは私のお気に入りの拡張メソッドです):
public static IEnumerable<TSource> ForEach<TSource>(this System.Collections.Generic.IEnumerable<TSource> source, Action<TSource> action)
{
ThrowIfNull(source, "source");
ThrowIfNull(action, "action");
foreach (TSource item in source)
{
action(item);
}
return source;
}
public static IEnumerable<TSource> ForEach<TSource>(this System.Collections.Generic.IEnumerable<TSource> source, Action<TSource, int> action)
{
ThrowIfNull(source, "source");
ThrowIfNull(action, "action");
int index = 0;
foreach (TSource item in source)
{
action(item, index);
index++;
}
return source;
}
次に、
this.Facts.Select(f =>f.FactIc).ForEach((f, i) => vals[1, i] = f);
これよりもはるかに効率的になることはできません。データは最初はフラットな配列ではないため、何らかの方法で各アイテムを反復処理してデータをコピーする必要があります。これにより、アレイなどの中間コピーを作成する必要がなくなります。