列出多维数组的单维

时间:2011-09-28 15:25:35

标签: c# arrays list

是否有可能没有循环(即不使用for或foreach以及一些LINQ或Array方法)将列表的元素插入到声明的多维数组的单个维度中?

例如 - 从列表中:

List<int> l = new List<int> { 1, 2, 3, 4, 5 };

到多维数组:

int [,] a = new int[5, 3]; //5 rows 3 columns

使得整数1到5填充第3列,即

a[0, 2] = 1;
a[1, 2] = 2;
a[2, 2] = 3;
a[3, 2] = 4;
a[4, 2] = 5;

非常感谢。

3 个答案:

答案 0 :(得分:1)

您无法使用标准Linq运算符(至少不容易),但您可以创建专用的扩展方法:

public TSource[,] ToBidimensionalArrayColumn<TSource>(this IEnumerable<TSource> source, int numberOfColumns, int targetColumn)
{
    TSource[] values = source.ToArray();
    TSource[,] result = new TSource[values.Length, numberOfColumns];
    for(int i = 0; i < values.Length; i++)
    {
        result[i, targetColumn] = values[i];
    }
    return result;
}
顺便说一句,如果没有循环,就没有办法做到这一点。甚至Linq运营商也在内部使用循环。

答案 1 :(得分:1)

列表与LT; T&GT;有一个你可以使用的ForEach方法 - 它不是LINQ,但它可以得到你想要的东西:


List l = new List { 1, 2, 3, 4, 5 }; 
int [,] a = new int[5, 3]; //5 rows 3 columns 

int i = 0;
l.ForEach(item => a[i++, 2] = item);

答案 2 :(得分:1)

这是一个奇怪的要求,我很想知道你想用它做什么。

(LinqPad示例)

void Main()
{
    List<int> l = new List<int> { 1, 2, 3, 4, 5 };
    ToFunkyArray<int>(l, 4,3).Dump();
}

public T[,] ToFunkyArray<T>(IEnumerable<T> items, int width, int targetColumn)
{
    var array = new T[items.Count(),width];
    int count=0;
    items.ToList().ForEach(i=>{array[count,targetColumn]=i;count++;});
    return array;
}