从LINQ Select填充数组的给定维度

时间:2012-08-10 02:12:06

标签: c# .net multidimensional-array

我想从LINQ select中填充多维数组的给定维度。 循环是一种显而易见的方式,但我想要一个“最佳实践”建议。

例如,插入此内容的最佳方式是什么:

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

会将long数组返回到此数组的第二维:

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

1 个答案:

答案 0 :(得分:1)

阵列数组怎么样?如果您发现经常需要替换整行的内容,那么每行可能应该是一个数组。您甚至可以定义自己的包含行数据的类,然后定义该类的数组。

BTW,为什么你有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);

你真的不能比这更有效率。数据不是以平面数组开头,因此在某种程度上,您需要迭代每个项目并复制数据。这避免了制作数组等的中间副本。