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