提问人:mapface 提问时间:5/24/2021 最后编辑:mapface 更新时间:5/24/2021 访问量:112
C# 2D 数组匹配并返回 1 维
C# 2D Array Match and Return 1 Dimension
问:
我有一个 [Name, Code] 格式的 2D 字符串数组,其中 Code 是一个大写字母。我想根据“代码”的匹配返回数组中的所有“名称”,以增加我需要根据用户输入执行此操作的复杂性,直到输入哨兵值。
示例:array = [Fred, X],[Bryan, Y],[Angus,X],用户输入为“X”,想要返回 Fred 和 Angus。我的尝试——
string CodeInput;
const string STOP = "999";
Write("\nEnter a Code or 999 to stop >> ");
CodeInput = ReadLine();
do
{
for (int Name = 0, Code =1; Name < array.GetLength(0); Name++)
{
if (CodeInput == array[Name,Code])
{
for (int NameB = 0; NameB < array.GetLength(0); NameB++)
WriteLine(array[NameB, 0]);
}
else
{
Write("\nIncorrect code");
}
Write("\nEnter a Code or 999 to stop >> ");
CodeInput = ReadLine();
}
}
while (CodeInput != STOP);
}
匹配结果会列出所有名称,而不仅仅是匹配。我明白为什么它不起作用 - 第一个数组循环找到一个匹配项,然后第二个只是吐出所有名称 - 但我不知道如何让它工作。是的,这是家庭作业,我希望能够使用字典而不是数组,但不幸的是不是一个选项。
答:
1赞
John Doe
5/24/2021
#1
第二个循环吐出所有的名字,因为这正是你要求他做的事情。
for (int NameB = 0; NameB < array.GetLength(0); NameB++)
WriteLine(array[NameB, 0]);
等同于显示所有名称。
您要做的是:
do
{
// Flag to indicate that you've found at least one match.
bool isFound = false;
for (int Name = 0, Code = 1; Name < array.GetLength(0); Name++)
{
if (CodeInput == array[Name, Code])
{
Console.WriteLine(array[Name, 0]);
isFound = true;
}
}
// If no matches found - display message
if (!isFound)
{
Console.Write("\nIncorrect code");
}
// Moved out of cycle, so it won't be asked every iteration.
Console.Write("\nEnter a Code or 999 to stop >> ");
CodeInput = Console.ReadLine();
}
while (CodeInput != STOP);
评论