是否有可能没有循环(即不使用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;
非常感谢。
答案 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;
}