【问题标题】:Invert array of arrays反转数组数组
【发布时间】:2014-06-22 13:34:22
【问题描述】:

我有一个string[][]
列表中的每个条目代表文档中的一列,数组的每个成员代表该列中的一行。
示例:

0.0 | 1.0 | 2.0  
0.1 | 1.1 | 2.1  
0.2 | 1.2 | 2.2  

现在我把它写到一个文件中。但是,如果我这样做,我首先需要将它们转换为 string[],其中每个元素都是一行,并用逗号(.csv 文件)连接。

任何建议如何做到这一点?

我尝试用几个循环将每列的第 n 个元素环绕在它周围,并将其填充到缓冲区中,然后将这些缓冲区连接在一起。我确信我会让它以这种方式工作,但我认为它在任何方面都没有效率或良好的风格。

【问题讨论】:

  • @SatelliteSD 实际上它是我雇主使用的用于 Excel 的糟糕 VBA-AddIn 替代品的一部分。

标签: c# arrays jagged-arrays


【解决方案1】:

好简单:假设整个数组是矩形的(即所有行中的项目数相同,所有列中的项目数相同)。你现在要做的是,在 (x,y) 处给定一个项目,将其位置更改为 (y,x)。

所以:

var array2 = new string[array1.GetLength(0), array1.GetLength(1)];
for(int i=0;i<array2.GetLength(0);i++){
    for(int j=0;j<array2.GetLength(1);j++)
        array2[i,j] = array1[j][i]; //this is the magic line
}

【讨论】:

  • 我想知道为什么我在没有任何解释的情况下发布后立即获得反对票。
  • 这是 StackOverflow,有些人就是这么做的:\
  • +1 以获得更好的可理解性和灵活性。然而,另一个答案更接近我想要的输出。
【解决方案2】:

如果你从这个开始:

string[][] original = new[] {
    new[] { "0.0", "0.1", "0.2" },
    new[] { "1.0", "1.1", "1.2" },
    new[] { "2.0", "2.1", "2.2" }
};

然后您可以这样做以依次处理每一行:

for (int column = 0; column < original.Length; column++)
{
    string row = string.Join(",", original.Select(o => o[column]));
    Console.WriteLine(row);    
}

这会产生以下输出:

0.0,1.0,2.0
0.1,1.1,2.1
0.2,1.2,2.2

【讨论】:

  • 谢谢!我想过这样的事情,但不知何故它更复杂
猜你喜欢
  • 1970-01-01
  • 2018-02-09
  • 2015-08-05
  • 1970-01-01
  • 2015-04-09
  • 1970-01-01
  • 1970-01-01
  • 2020-08-06
相关资源
最近更新 更多