gpt4 book ai didi

c# - LINQ可以构造并返回一个多维数组吗

转载 作者:太空狗 更新时间:2023-10-30 00:51:35 24 4
gpt4 key购买 nike

是的,我确实知道交错数组 [][] 和多维数组 [,] 之间的区别。

是的,我查找了重复项并找到了这些:

其中最后一个包含完成这项工作的功能。但我的问题仍然是:是否有任何方法(无论多么扭曲或做作)说服 LINQ 以多维数组的形式构造和返回结果(不是锯齿状数组)?


它与问题并没有真正相关,但导致这里的问题是那些看起来像是“为 LINQ 制作”的小工作之一,只是我需要调用的函数是用多维数组参数定义的.将答案生成为锯齿状数组的 LINQ 代码编写了大约 5 分钟,然后呢?我是否遗漏了什么,或者 LINQ 真的没有办法完成这项工作吗?


我想我应该说:除了编写一大块代码以旧方式执行此操作并将其作为 lambda 嵌入或将其作为扩展方法调用之外。现在看起来 LINQ 既不能生成也不能使用多维数组,我的问题的答案是否定的。

最佳答案

嗯..好吧..确定吗?这是一个示例,如果可能,如何将整数列表转换为二维数组。

void Main()
{
var wat = new[]{2, 4, 5, 6, 7, 8}
.Select(x => new { dummy=1, val= x})
.GroupBy(x => x.dummy) // group everything into one, "UNFLATTEN"
.Select(gr =>
{
var elements = gr.Select(x => x.val).ToList();
if(elements.Count == 0 || elements.Count % 2 != 0)
throw new NotSupportedException("I don't know what to do.");

var halfSize = elements.Count / 2;

int[,] ret = new int[2, halfSize];

for(var k = 0; k < halfSize; k++){
ret[0, k] = elements[k];
ret[1, k] = elements[elements.Count - halfSize + k];
}

return ret;
}
).First();

wat.Dump();
}

输出:

_ 0 1 2

0 2 4 5

1 6 7 8

正如其他人所说,您最好创建新的扩展方法:

static class LinqExtensions
{
public static T[,] ToRectangularArray<T>(this IEnumerable<IEnumerable<T>> arrays)
{
// TODO: Validation and special-casing for arrays.Count == 0
// TODO: Rename "arrays"
// TODO: Make sure that Count() is used only once,
// TODO: ElementAt() does not work everywhere, you're better off using ToList() before!
int minorLength = arrays.First().Count();
T[,] ret = new T[arrays.Count(), minorLength];
for (int i = 0; i < arrays.Count(); i++)
{
var array = arrays.ElementAt(i);
if (array.Count() != minorLength)
{
throw new ArgumentException
("All arrays must be the same length");
}
for (int j = 0; j < minorLength; j++)
{
ret[i, j] = array.ElementAt(j);
}
}
return ret;
}
}

void Main()
{
var wat = new[]{new[]{2, 4, 5}, new[]{6, 7, 8}}.ToRectangularArray();
wat.Dump();
}

为了方便起见,您可能希望为 IEnumerable<T> 添加相同的扩展方法。 ,并这样调用它:ToRectangularArray<T>(this IEnumerable<T> input, int dimensions = 2)

关于c# - LINQ可以构造并返回一个多维数组吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26233003/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com