从List 转换为double
是否存在将List
转换为double[,]
的单行(无循环)?
转换为double[,]
只能通过遍历列表来完成,并要求列表中包含的所有数组具有相同的大小:
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]; } }
当然,您可以通过调用.ToArray()
轻松创建一个锯齿状的double[][]
数组数组:
double[] array = new double[] { 1.0, 2.0, 3.0 }; double[] array1 = new double[] { 4.0, 5.0, 6.0 }; List list = new List(); list.Add(array); list.Add(array1); double[][] jaggedArray = list.ToArray();
好吧,你可能无法在没有循环的情况下实现它,但你可以使用一个单行:
double[,] array = list.To2DArray();
To2DArray
是一种扩展方法,实现如下:
public static class ExtensionMethods { public static T[,] To2DArray(this IEnumerable> 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; } }
请注意,它仅适用于C#4,因为早期版本不支持协方差。 此变体应该在C#3中工作,但它更具体:
public static T[,] To2DArray(this IEnumerable source) { var jaggedArray = source.ToArray(); // same code from here }
如果要从List of 1 dim数组创建2 dim数组,则需要循环,尽管它可能看起来不像在调用站点那样。
public static T[,] ToMultidimensional(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 { new double[] { 1, 2, 3 }, new double[] { 4, 5 } } .ToArray(); var j = arr.ToMultidimensional(arr.Max(a => a.Length));
此语法应该有效:返回新列表{new double [] {minX,minY},new double [] {maxX,maxY}};
上述就是C#学习教程:从List 转换为double分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注---计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/961664.html