Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 列表到多维数组的单个维度_C#_Arrays_List - Fatal编程技术网

C# 列表到多维数组的单个维度

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运算符无法实现这一点(至少不容易),但您可

是否可以在不循环的情况下(即不使用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运算符无法实现这一点(至少不容易),但您可以创建一个专用的扩展方法:

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;
}