像一个简单的数组:
Console.WriteLine("Number: ");
int x = Convert.ToInt32(Console.ReadLine());
string[] strA = new string[x];
strA[0] = "Hello";
strA[1] = "World";
for(int i = 0;i < x;i++)
{
Console.WriteLine(strA[i]);
}
现在,我该如何使用双数组?
我已经尝试过:
Console.WriteLine("Number 1: ");
int x = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("Number 2: ");
int y = Convert.ToInt32(Console.ReadLine());
// Got an error, right way string[x][];
// But how can I define the second array?
string[][] strA = new string[x][y];
strA[0][0] = "Hello";
strA[0][1] = "World";
strA[1][0] = "Thanks";
strA[1][1] = "Guys";
for(int i = 0;i < x;i++)
{
for(int j = 0;i < y;i++)
{
// How can I see the items?
Console.WriteLine(strA[i][j]);
}
}
如果有一种更简单的方法,我将很高兴学习它。
这只是出于知识,我是第一次学习双数组,所以请耐心等待:)
这是我的例子: https://dotnetfiddle.net/PQblXH
答案 0 :(得分:6)
您使用的是锯齿状的数组(即数组string[][]
的数组),而不是 2D 的数组(即string[,]
)
如果要硬编码:
string[][] strA = new string[][] { // array of array
new string[] {"Hello", "World"}, // 1st line
new string[] {"Thanks", "Guys"}, // 2nd line
};
如果您想提供x
和y
:
string[][] strA = Enumerable
.Range(0, y) // y lines
.Select(line => new string[x]) // each line - array of x items
.ToArray();
最后,如果我们要在没有 Linq 的情况下初始化strA
,但可以很好地完成所有for
循环(与2d数组不同, jagged 数组可以包含内部不同长度的数组):
// strA is array of size "y" os string arrays (i.e. we have "y" lines)
string[][] strA = new string[y][];
// each array within strA
for (int i = 0; i < y; ++i)
strA[i] = new string[x]; // is an array of size "x" (each line of "x" items)
编辑:让我们逐行打印出锯齿状阵列:
旧的for
循环
for (int i = 0; i < strA.Length; ++i) {
Console.WriteLine();
// please, note that each line can have its own length
string[] line = strA[i];
for (int j = 0; j < line.Length; ++j) {
Console.Write(line[j]); // or strA[i][j]
Console.Write(' '); // delimiter, let it be space
}
}
紧凑代码:
Console.Write(string.Join(Environment.newLine, strA
.Select(line => string.Join(" ", line))));
答案 1 :(得分:3)
您使用的是jagged array而不是multidimensional。只需使用[,]
而不是[][]
。然后,您可以将其与new string[x, y]
一起使用。
答案 2 :(得分:1)
首先,您需要在编写代码之前弄清楚头脑中的事情。
我建议用简单的短语写你想做什么。小提琴中的代码无处不在。我将解决小提琴中的代码,而不是您的问题,因为您有错别字错误和其他问题,而小提琴中没有错误,而小提琴中有该问题没有的错误。
为简化问题,请使用清晰易懂的名称。 2d数组将是一个具有行和列的表。
number
您需要先声明表,然后才能知道其大小。
// 1/. Ask for 2table dim sizes.
Console.WriteLine("Enter number of rows:");
var x = int.Parse(Console.ReadLine());
Console.WriteLine("Enter number of columns:");
var y = int.Parse(Console.ReadLine());
var table = new string[x, y];
// 2/. Fill the board
for (int row = 0; row < table.GetLength(0); row++)
{
for (int col = 0; col < table.GetLength(1); col++)
{
Console.WriteLine($"Enter the value of the cell [{row},{col}]");
table[row, col] = Console.ReadLine();
}
}
等效于X,table.GetLength(0)
等效于Y,并且可以替换。
table.GetLength(1)
对于以00X,0X0,X00作为输入的3x3表,结果为
// 3/. Display the Table
Console.Write("\n");
for (int row = 0; row < table.GetLength(0); row++)
{
for (int col = 0; col < table.GetLength(1); col++)
{
Console.Write(table[row, col]);
}
Console.Write("\n");
}
有效。在显示时,您可以通过简单地添加逗号或空格来分隔每个单元格。 Fiddle
对于锯齿阵列:
00X
0X0
X00
答案 3 :(得分:0)
使用了错误的变量:
for(int j = 0;i < y;i++) <- Should be j
{
// How can I see the items?
Console.WriteLine(strA[i][j]);
}