Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.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# 从列表转换为double[,]_C#_Arrays - Fatal编程技术网

C# 从列表转换为double[,]

C# 从列表转换为double[,],c#,arrays,C#,Arrays,是否存在将列表转换为双[,]的一行无循环?如果要从一个dim数组列表创建一个2 dim数组,则需要循环,尽管它可能与呼叫站点上的情况不同。转换为双[,]只能通过循环列表来完成,并且要求列表中包含的所有数组大小相同: double[,] arr = new double[list.Count, list[0].Length]; for (int i = 0; i < list.Count; i++) { for (int j = 0; j < list[0].Length; j

是否存在将列表转换为双[,]的一行无循环?

如果要从一个dim数组列表创建一个2 dim数组,则需要循环,尽管它可能与呼叫站点上的情况不同。

转换为双[,]只能通过循环列表来完成,并且要求列表中包含的所有数组大小相同:

double[,] arr = new double[list.Count, list[0].Length];
for (int i = 0; i < list.Count; i++)
{
    for (int j = 0; j < list[0].Length; j++)
    {
        arr[i, j] = list[i][j];
    }
}

嗯,如果没有循环,您可能无法实现它,但您可以使用一行程序:

double[,] array = list.To2DArray();
To2DArray是一种扩展方法,实现如下:

public static class ExtensionMethods
{
    public static T[,] To2DArray<T>(this IEnumerable<IEnumerable<T>> source)
    {
        var jaggedArray = source.Select(r => r.ToArray()).ToArray();
        int rows = jaggedArray.GetLength(0);
        int columns = jaggedArray.Max(r => r.Length);
        var array = new T[rows, columns];
        for (int i = 0; i < rows; i++)
        {
            for (int j = 0; j < jaggedArray[i].Length; j++)
            {
                array[i, j] = jaggedArray[i][j];
            }
        }
        return array;
    }
}
注意,它只在C4中工作,因为早期版本不支持协方差。此变体应适用于C3,但更具体:

public static T[,] To2DArray<T>(this IEnumerable<T[]> source)
{
    var jaggedArray = source.ToArray();
    // same code from here
}
此语法应适用于:
返回新列表{new double[]{minX,minY},new double[]{maxX,maxY}

这一切都取决于你希望你的队伍有多长:我怀疑有超过80个字符。@leppie,我当然希望它尽可能短@leppie:想知道80个字符的长度是否是标准长度吗?@abatishchev:过去是,现在,我想人们更喜欢120个字符。@leppie:从来都不知道这么小的尺寸。19个监视器广泛出现。许多开发人员拥有比19、21和25更大的监视器。所以140-240个字符很容易查看,若数组不是必需的,你们也可以添加尾随的零size@abatishchev:是的,说得好。这需要额外的过程才能首先找到列表中的最大长度项,以便确定所需的数组大小。最好先找到列表中最长的数组,然后使用列表[0]@Danny:我认为迭代一次要比修剪所有数组的时间长得多first@Danny:new List.Maxa=>a.lenght您可以使用int rows=source.Count;int columns=source.Maxr=>r.Count;直接创建一个锯齿状数组。是的,但之后我需要锯齿状数组来访问数据。我可以使用ElementAt方法,但对于只能枚举一次的可枚举项,它不起作用
public static T[,] To2DArray<T>(this IEnumerable<T[]> source)
{
    var jaggedArray = source.ToArray();
    // same code from here
}
public static T[,] ToMultidimensional<T>(this T[][] arr, int maxSize)
{
    T[,] md = (T[,])Array.CreateInstance(typeof(double), arr.Length, maxSize);

    for (int i = 0; i < arr.Length; i++)
    for (int j = 0; j < arr[i].Length; j++)
        md[i, j] = arr[i][j];

    return md;
}

var arr = new List<double[]>
{
    new double[] { 1, 2, 3 },
    new double[] { 4, 5 }
}
.ToArray();

var j = arr.ToMultidimensional(arr.Max(a => a.Length));