0

LINQselectから多次元配列の特定の次元にデータを入力したいと思います。ループは明らかな方法ですが、「ベストプラクティス」の提案が必要です。

たとえば、これを挿入するための最良の方法は次のとおりです。

this.Facts.Select(f =>f.FactIc).ToArray()

これは、longの配列をこの配列の2番目の次元に返します。

long[,] vals = new long[1, factCount];
4

1 に答える 1

1

配列の配列はどうですか?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);

これよりもはるかに効率的になることはできません。データは最初はフラットな配列ではないため、何らかの方法で各アイテムを反復処理してデータをコピーする必要があります。これにより、アレイなどの中間コピーを作成する必要がなくなります。

于 2012-08-10T02:20:28.103 に答える