【问题标题】:LINQ: How to Transpose 1D Array into 2D Array By RowLINQ:如何按行将 1D 数组转置为 2D 数组
【发布时间】:2019-05-23 19:16:37
【问题描述】:

Linq 中是否有一种方法可以获取我的 string[] 中的每个元素,并按每个元素的行将每个元素分配给一个方形多维(2D)数组。意思是 2D[0,i],其中 i 增加 1 分配 1D[i]。注意,保证一维数组的长度与二维数组的宽度相同。另外,我的二维数组访问器仅限于类索引器,所以我的类索引器看起来像这样,CLASS[r,c]。

这是我创建一维数组的方式:lineRead.Split(" ", StringSplitOptions.RemoveEmptyEntries);

在sudo代码中,这是我想要实现的。

lineRead.Split(" ", StringSplitOptions.RemoveEmptyEntries).Select(e => CLASS[r,c] = e);

我对 Linq 很糟糕,我觉得应该有办法做到这一点,显然我不知道我在这里用 Linq 做什么......哈哈 任何想法,任何帮助?谢谢

【问题讨论】:

标签: c# linq multidimensional-array


【解决方案1】:

假设r 是不变的(0,因为你没有在你的帖子中提到),这是一种方法:

string lineRead = "apple mango orange grape";
int i = 0;
lineRead.Split(new[] {" "}, StringSplitOptions.RemoveEmptyEntries)
.ToList()
.ForEach(item => { CLASS[0, i++] = item; });

样本输出:

CLASS[0,0] = "苹果"

CLASS[0,1] = "芒果"

CLASS[0,2] = "橙色"

CLASS[0,3] = "葡萄"

虽然坦率地说,一个好的旧 for 循环也可以做到:

string lineRead = "apple mango orange grape";
var values = lineRead.Split(new[] { " " }, StringSplitOptions.RemoveEmptyEntries);
for (int i = 0; i < values.Length; i++)
{
    CLASS[0,i] = values[i];
}

【讨论】:

  • 谢谢你,这确实有很大帮助。我最终使用了一个循环,但我可能会重构为一个 Linq 语句,因为您的解决方案非常优雅。您如何看待两人的表现?
  • @MatthewJett:我很高兴能够提供帮助。两者的性能可能大致相同。我个人更喜欢可读性更高的代码。祝你好运!
猜你喜欢
  • 1970-01-01
  • 2017-07-29
  • 1970-01-01
  • 2022-01-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-11
  • 1970-01-01
相关资源
最近更新 更多