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 维的主要内容,如果未能解决你的问题,请参考以下文章

调用初始化程序没有完全匹配 - Swift 2D 数组

C#判断某个字符串是否在另一个字符串数组中

比较两个对象数组并在新数组中返回匹配值

迭代一个数组并只返回匹配的值? [复制]

简单的控制台乐透游戏 c# 匹配数组

JavaScript 通过数组过滤并仅基于一个值的匹配返回