gpt4 book ai didi

c# - 将二维数组转换为连续排列的行项目的一维列表

转载 作者:太空宇宙 更新时间:2023-11-03 19:44:38 25 4
gpt4 key购买 nike

我有一个二维字符数组

我想遍历并将每个 char + index 按连续顺序添加到新的 1D list

因此新的一维列表将显示为:

G0
V1
H2
F3
I4
E5
V6
A7
U8
G9
N10
L11
...

C#

char[,] array = new char[6,4] { 
{ 'G', 'V', 'H', 'F' },
{ 'I', 'E', 'V', 'A' },
{ 'U', 'G', 'N', 'L' },
{ 'G', 'X', 'F', 'W' },
{ 'E', 'N', 'L', 'H' },
{ 'A', 'H', 'V', 'B' }
};


List<string> matrixCharacters = new List<string>();


for (int m = 0; m < 24; m++) // marix positions 24
{
for (int r = 0; r < 6; r++) // matrix rows 6
{
for (int c = 0; c < 4; c++) // matrix columns 4
{
matrixCharacters.Add(array[r,c].ToString() + r.ToString());
}
}
}

但是我在制作一个可以做到这一点的循环时遇到了麻烦。

这显示:

http://rextester.com/RPRXM23687

G0
V0
H0
F0
I1
E1
V1
A1
U2
G2
N2
L2
...

方法二显示:

http://rextester.com/TYLJE96460

GVHF0
IEVA1
UGNL2
GXFW3
ENLH4
AHVB5

最佳答案

您可以用单个 LINQ 查询替换循环以及必须手动创建列表,这也会使整个代码更紧凑:

var list = array.Cast<char>().Select((c, i) => $"{c}{i}").ToList();

让我们来看看它是如何工作的:

  • array.Cast<char>() - 这会将 2D 矩阵展平为线性阵列,或者更确切地说,它枚举 2D 阵列中的项目,就好像它是一个线性阵列一样。它在这种情况下很有用,在这种情况下,您有兴趣查看每个项目,而不必实际创建额外的列表或将原始数据复制到另一个数据结构中。
  • Select((c, i) => $"{c}{i}") - 这将选择功能应用于前一个序列中的每个项目。因为我们在 Cast<char>() 的结果上调用它,这会将我们的函数应用于原始列表中的每个字符。在这种情况下,该函数采用两个参数 (c, i) , 一个字符及其在列表中的索引,并返回字符串 $"{c}{i}" .我们正在使用字符串插值,因此 {} 括号之间的值将是我们在 lambda 函数中的参数。回顾一下,原始数组中的每个项目都将与其索引一起被选择,这个函数的结果将是一个包含值本身的字符串,由 {c} 给出。及其索引,由 {i} 给出.
  • ToList() - 这只会创建一个列表,其中包含之前查询的结果项。

长期研究 LINQ 方法是个好主意,因为在这种情况下,它们通常比手动循环更不容易出错。

如果您是 C# 新手,LINQ 查询一开始可能看起来比较晦涩,但从长远来看,这将是非常值得的,因为它可以让您节省大量时间对给定的一组项目进行一些选择/过滤/查询。

关于c# - 将二维数组转换为连续排列的行项目的一维列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47783646/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com