C# 二维数组匹配和 Return 1 维

C# 2D Array Match and Return 1 Dimension

我有一个二维字符串数组,格式为 [Name, Code],其中 Code 是单个大写字母。我想 return 数组中的所有 'Names' 基于 'Code' 的匹配,以增加我需要根据用户输入执行此操作的复杂性,直到输入标记值。

示例:array = [Fred, X],[Bryan, Y],[Angus,X],用户输入是 'X',想要 return 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);
    }

匹配结果列出了所有名称,而不仅仅是匹配。我明白为什么它不起作用——第一个数组循环找到一个匹配项,然后第二个数组循环只是吐出所有名字——但我不知道如何让它工作。是的,这是家庭作业,我希望能够使用字典而不是数组,但不幸的是这不是一个选项。

第二个 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);