当前位置:  开发笔记 > 编程语言 > 正文

在C#中从矩形数组中提取一维数组的最佳方法是什么?

如何解决《在C#中从矩形数组中提取一维数组的最佳方法是什么?》经验,为你挑选了2个好方法。

假设我有一个矩形字符串数组 - 不是锯齿状数组

string[,] strings = new string[8, 3];

从中提取一维数组(单行还是单列)的最佳方法是什么?当然,我可以使用for循环执行此操作,但我希望.NET内置更优雅的方式.

用于将提取的字符串数组转换为对象数组的加值点.



1> Jon Skeet..:

您可以简单地将字符串数组转换为对象数组 - 另一种方式不起作用.实际的提取必须使用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方法并重用它们.



2> Cameron MacF..:

对于矩形阵列:

string[,] rectArray = new string[3,3] { 
    {"a", "b", "c"}, 
    {"d", "e", "f"}, 
    {"g", "h", "i"} };

var rectResult = rectArray.Cast().ToArray();


对于锯齿状阵列:

string[][] jaggedArray =  { 
    new string[] {"a", "b", "c", "d"}, 
    new string[] {"e", "f"}, 
    new string[] {"g", "h", "i"} };

var jaggedResult = jaggedArray.SelectMany(s => s).Cast().ToArray();

推荐阅读
echo7111436
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有