【发布时间】:2022-07-14 04:07:20
【问题描述】:
我有一个 6x6 字符的二维数组,看起来像这样,我试图创建一个方法,女巫需要用“@”字符替换行中的重复项
a b a a
a a b c
a a a b
a a a a
用方法替换后应该是这样的
a b @ @
a @ b c
a @ @ b
a @ @ @
我已经尝试过这种方法,但没有结果“我需要在没有库的情况下完成这项工作”
public void RemoveDuplicates(char[,] array)
{
char symbol = '@';
for (int i = 0; i < array.GetLength(0); i++)
{
for (int j = 0; j < array.GetLength(1); j++)
{
int temp = array[i, j];
int next = ++temp;
if(temp == next)
{
next = symbol;
}
}
}
}
【问题讨论】:
-
“没有库”是否意味着您不能使用
HashSet<T>? -
NO 不能用,我什至不知道 HahSet
是什么 -
“但没有结果”,因为您永远不会更改数组中的任何条目。实际上,在将字符保存到
temp之后,您需要第三个循环遍历该行的其余部分。这是一个完美的练习,首先要使用笔和纸来解决。将循环的每个迭代变量想象成指向矩阵中维度/元素的手指 -
字符的范围是多少? a-z?还是 a-z + A-Z?还是任何Unicode字符?答案可能会改变最佳实施方式。有效率要求吗?
-
另一个你进入的陷阱是这里从 char 到 int 的隐式转换:
int temp = array[i, j];你实际上得到了那个 char 的 UTF-16 代码而不是索引!之后增加它时,您不会将指针移动到字符,而是更改字符本身!你在 UTF-16 代码中前进。