C# 列表到多维数组的单个维度
是否可以在不循环的情况下(即不使用for或foreach,也不使用某些LINQ或数组方法)将列表的元素插入已声明多维数组的单个维度中 例如,从列表:C# 列表到多维数组的单个维度,c#,arrays,list,C#,Arrays,List,是否可以在不循环的情况下(即不使用for或foreach,也不使用某些LINQ或数组方法)将列表的元素插入已声明多维数组的单个维度中 例如,从列表: List<int> l = new List<int> { 1, 2, 3, 4, 5 }; 这样整数1到5填充第3列,即 a[0, 2] = 1; a[1, 2] = 2; a[2, 2] = 3; a[3, 2] = 4; a[4, 2] = 5; 非常感谢。使用标准Linq运算符无法实现这一点(至少不容易),但您可
List<int> l = new List<int> { 1, 2, 3, 4, 5 };
这样整数1到5填充第3列,即
a[0, 2] = 1;
a[1, 2] = 2;
a[2, 2] = 3;
a[3, 2] = 4;
a[4, 2] = 5;
非常感谢。使用标准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;
}
public TSource[,]ToBidimensionalArrayColumn(此IEnumerable源、int numberOfColumns、int targetColumn)
{
TSource[]value=source.ToArray();
TSource[,]结果=新的TSource[values.Length,numberOfColumns];
for(int i=0;i
顺便说一句,没有循环是无法做到的。甚至Linq操作符也在内部使用循环。List有一个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);
这是一个奇怪的要求,我很好奇你想用它实现什么 (LinqPad示例)
void Main()
{
列表l=新列表{1,2,3,4,5};
ToFunkyArray(l,4,3).Dump();
}
公共T[,]ToFunkyArray(IEnumerable items,int-width,int-targetColumn)
{
var array=newt[items.Count(),width];
整数计数=0;
items.ToList().ForEach(i=>{array[count,targetColumn]=i;count++;});
返回数组;
}
如果有LINQ或数组方法,它将在内部循环。这算不算“无循环”?不算-我只是觉得应该可以在没有for或foreach的情况下这样做-我会修正这个问题。所有LINQ都是基于IEnumerable的-都是关于循环的(尽管是带有收益率回报的延迟循环)。如果不能使用loops/IEnumerable,就不能使用LINQ。@Barry如果没有某种类型的循环结构,你到底打算怎么做?您所能做的最好的事情就是用抽象隐藏循环。
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);
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;
}