C# 2D 数组匹配并返回 1 维
Posted
技术标签:
【中文标题】C# 2D 数组匹配并返回 1 维【英文标题】:C# 2D Array Match and Return 1 Dimension 【发布时间】:2021-08-12 18:53:28 【问题描述】:我有一个 [Name, Code] 格式的二维字符串数组,其中 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);
匹配结果会列出所有名称,而不仅仅是匹配。我理解为什么它不起作用 - 第一个数组循环找到匹配项,而第二个则只是吐出所有名称 - 但我不知道如何让它工作。是的,这是家庭作业,我希望能够使用字典而不是数组,但不幸的是,这不是一个选项。
【问题讨论】:
您的示例代码中缺少数组声明...它是基于您自己的选择的2D,还是基于作业要求?在第一种情况下,我将重新声明为对数组(可能是自定义结构或 KeyValuePair);在后一种情况下,缺少一些信息,因为那样的话,我不明白您如何将代码用作密钥。 这是一段较大代码的示例,我错过了包含声明的抱歉。不幸的是,二维数组是一个要求(或者任何类型的数组,但我现在已经承诺使用二维数组,回想一下一个糟糕的决定?) 为什么是 2D?您是否有由 2 个不同的、不相关的键索引的数据?此类索引的一个示例是国际象棋/棋盘,其中您有一个数字索引和一个字母索引,它们的组合指向您找到唯一对象(游戏棋子)的单个图块。请注意,在棋盘格中,所有索引键都是唯一的。相反,在您的解释中,“X”和“Y”似乎更像是属性(即您可以找到几个人的人的姓氏或建筑物的楼层),可用于查找项目但不能唯一标识他们。 【参考方案1】:第二个for循环吐出所有名字,因为这正是你要求他做的事情。
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);
【讨论】:
以上是关于C# 2D 数组匹配并返回 1 维的主要内容,如果未能解决你的问题,请参考以下文章