遍历数组c#
Looping through an array c#
在我的井字游戏中,我有一个数组声明如下:
static char[] boardArray = new char[9]{ '0', '1', '2', '3', '4', '5', '6', '7', '8'};
我有一个
private static void resetBoard(ref char[] arr)
{
for(int i = 0; i < 9; i++) {
arr[i] = (char)i;
}
}
但是当我调用这个方法时:
resetBoard(ref boardArray);
它将所有数组值设置为空字符。
为什么会这样?
我没有将它们设置为空,而是设置为 ASCII 值 0 - 9,这与字符 '0' - '9' 非常不同。
你想要什么:
for(int i = 0; i < arr.Length; i++)
{
arr[i] = (char)(i + '0');
}
顺便说一句,
- 这里不需要
ref
,数组是引用类型。
- 使用
arr.Length
更清晰并且可能更快
这里发生了一些事情。
(1) 您不需要使用 ref
。无论如何,数组都是通过引用有效传递的。这意味着您在采用数组的函数中所做的任何更改对于函数的调用者来说都是显而易见的。未制作副本。
(2) 您正在将 ASCII(实际上是 Unicode,但在这里无关紧要)代码 0 到 8 分配给您的数组。我假设你想要实际的数字,这将是另外一回事。在这种情况下,请改用此代码,它将整数 i
转换为字符串并获取该字符串的第一个字符(无论如何只有一个字符):
arr[i] = i.ToString()[0];
(3) 确保在 for
循环中使用 arr.Length
,因为它允许您更改数组的大小而无需更新 for
中的代码] 环形。通常,在代码中避免 0
和 1
以外的常量(与所有规则一样,有很多例外)。
简单的回答,使用arr[i] = char.Parse(i.ToString());
而不是arr[i] = (char)i;
。
在我的井字游戏中,我有一个数组声明如下:
static char[] boardArray = new char[9]{ '0', '1', '2', '3', '4', '5', '6', '7', '8'};
我有一个
private static void resetBoard(ref char[] arr)
{
for(int i = 0; i < 9; i++) {
arr[i] = (char)i;
}
}
但是当我调用这个方法时:
resetBoard(ref boardArray);
它将所有数组值设置为空字符。 为什么会这样?
我没有将它们设置为空,而是设置为 ASCII 值 0 - 9,这与字符 '0' - '9' 非常不同。
你想要什么:
for(int i = 0; i < arr.Length; i++)
{
arr[i] = (char)(i + '0');
}
顺便说一句,
- 这里不需要
ref
,数组是引用类型。 - 使用
arr.Length
更清晰并且可能更快
这里发生了一些事情。
(1) 您不需要使用 ref
。无论如何,数组都是通过引用有效传递的。这意味着您在采用数组的函数中所做的任何更改对于函数的调用者来说都是显而易见的。未制作副本。
(2) 您正在将 ASCII(实际上是 Unicode,但在这里无关紧要)代码 0 到 8 分配给您的数组。我假设你想要实际的数字,这将是另外一回事。在这种情况下,请改用此代码,它将整数 i
转换为字符串并获取该字符串的第一个字符(无论如何只有一个字符):
arr[i] = i.ToString()[0];
(3) 确保在 for
循环中使用 arr.Length
,因为它允许您更改数组的大小而无需更新 for
中的代码] 环形。通常,在代码中避免 0
和 1
以外的常量(与所有规则一样,有很多例外)。
简单的回答,使用arr[i] = char.Parse(i.ToString());
而不是arr[i] = (char)i;
。