0
我想從LINQ select中填充多維數組的給定維數。 循環將是一個顯而易見的方式,但我想要一個「最佳實踐」的建議。從LINQ中填充給定維數的數組選擇
舉例來說什麼是最好的方式插入此:
this.Facts.Select(f =>f.FactIc).ToArray()
這將返回長整型數組這個數組的第二維:
long[,] vals = new long[1, factCount];
我想從LINQ select中填充多維數組的給定維數。 循環將是一個顯而易見的方式,但我想要一個「最佳實踐」的建議。從LINQ中填充給定維數的數組選擇
舉例來說什麼是最好的方式插入此:
this.Facts.Select(f =>f.FactIc).ToArray()
這將返回長整型數組這個數組的第二維:
long[,] vals = new long[1, factCount];
什麼數組的數組?如果你發現你經常需要替換整行的內容,那麼可能每行都應該是一個數組本身。你甚至可以定義你自己的包含行數據的類,然後定義該類的數組。
順便說一句,爲什麼你有ToList()和ToArray()?
編輯:假設結果必須是一個二維數組,我只想用下面的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);
你不能真的比這更有效率。數據不在平面數組中,因此您需要迭代每個項目並複製數據。這避免了數組的中間副本等。
它實際上是進入一個excel範圍,所以我不知道這是可行的。 ToList()。ToArray是一個現在正在編輯的錯字。 thx – rism 2012-08-10 02:36:10
@rism如果是這種情況,那麼我認爲你卡在2d數組?這幾乎減少了您以某種形式將數據複製到數組中的選項。您可以使用循環或Array.Copy。這並不重要,但我沒有看到創建一個數組(使用ToArray)的很多觀點,所以您可以使用Array.Copy。我將以一種方式編輯我的答案 – MikeKulls 2012-08-10 05:10:34