假设我有一个矩形字符串数组 - 不是锯齿状数组
string[,] strings = new string[8, 3];
从中提取一维数组(单行还是单列)的最佳方法是什么?当然,我可以使用for循环执行此操作,但我希望.NET内置更优雅的方式.
用于将提取的字符串数组转换为对象数组的加值点.
您可以简单地将字符串数组转换为对象数组 - 另一种方式不起作用.实际的提取必须使用for循环,据我所知:Array.Copy
要求源和目标等级相同,并且Buffer.BlockCopy
仅适用于值类型数组.虽然看起来很奇怪......
您可以在单个语句中使用LINQ来添加行或列,尽管它效率低(因为它会在内部构建列表,然后必须将其转换为数组 - 如果您自己执行,则可以预先分配数组大小合适并直接复制).
复制行(rowNum
是要复制的行):
object[] row = Enumerable.Range(0, rowLength) .Select(colNum => (object) stringArray[rowNum, colNum]) .ToArray();
复制列(colNum
是要复制的列):
object[] column = Enumerable.Range(0, columnLength) .Select(rowNum => (object) stringArray[rowNum, colNum]) .ToArray();
我不确定这是否比foreach循环更好/更简单 - 特别是如果你编写ExtractRow
方法和ExtractColumn
方法并重用它们.
对于矩形阵列:
string[,] rectArray = new string[3,3] { {"a", "b", "c"}, {"d", "e", "f"}, {"g", "h", "i"} }; var rectResult = rectArray.Cast
对于锯齿状阵列:
string[][] jaggedArray = { new string[] {"a", "b", "c", "d"}, new string[] {"e", "f"}, new string[] {"g", "h", "i"} }; var jaggedResult = jaggedArray.SelectMany(s => s).Cast