【问题标题】:Sorting Algorithm in a list列表中的排序算法
【发布时间】:2020-11-15 01:11:37
【问题描述】:

我正在尝试使用算法对列表进行排序。该列表包含包含日期、标题和条目的字符串数组。

所以我得到的错误信息是这样的:

错误 CS0019 运算符“>”不能应用于类型的操作数 “字符串[]”和“字符串[]”

我不会包含我所有的代码,因为它不是英文的。

List<string[]> loggBok = new List<string[]>();

        void nyttInlägg(string datum, string titel, string text) // När användaren anropar denna metoden från menyn, så kommer hans input
                                                                 // läggas in i vektorn. 
        {
            string[] anteckingar = new string[3] { "", "", "" };
            anteckingar[0] = datum;
            anteckingar[1] = titel;
            anteckingar[2] = text;
            loggBok.Add(anteckingar);

            
            
            bool isSorted = false;
            while (!isSorted)
            {
                isSorted = true;
                for (int i = 0; i < loggBok.Count - 1; i++)
                {
                    if ((loggBok[i]) > loggBok[i + 1])
                    {
                        string[] temp = loggBok[i + 1];
                        loggBok[i + 1] = loggBok[i];
                        loggBok[i] = temp;
                    }

                    i = i + 2;
                }
            }

所以基本上,列表中的每 3 个元素都会包含一个带有日期的字符串数组。这是我要组织的日期。我相信我理解算法背后的逻辑,但我就是无法正确理解语法。我检查了其他线程,有些有类似的问题,但没有一个是 100%。由于这是一个学校项目,它必须是一个算法,因此我不想让它“更容易”或更有效。关于如何克服这个可怕的错误信息的任何想法?

【问题讨论】:

  • 最重要的标签是编程语言。可以加吗?
  • 您应该将if ((loggBok[i]) &gt; loggBok[i + 1]) 替换为if ((loggBok[i][0]) &gt; loggBok[i + 1][0]))(也是右括号)。这将比较日期。
  • 应该是 logbok.add() 而不是 Add。还有 logbok.size() 而不是 logbok.Size()。

标签: c# arrays list algorithm


【解决方案1】:

一些问题:

  • if ((loggBok[i]) &gt; loggBok[i + 1]) 缺少右括号

  • 上述尝试比较数组,而您只想比较日期。所以你需要引用loggBok[i]中的日期条目:

    if ((loggBok[i][0]) > loggBok[i + 1][0]))
    
  • i 索引指的是数组(三元组),因此您不应将其增加三个,而只增加一个,因为当您执行 i++ 时,它将转到下一个三元组,这就是您想要的。所以删除i = i + 2,否则你会跳过其中的一些三元组。

【讨论】:

  • 谢谢你的朋友,我现在添加了C#语言。我进行了更改,引用的东西是有道理的,但我仍然遇到同样的错误,或者至少现在它不是说字符串数组,而只是字符串。 CS0019 运算符“>”不能应用于“字符串”和“字符串”类型的操作数
【解决方案2】:

运算符&gt; 大于不能应用于类型数组或类型字符串(如其他答案评论中所述) - 请查看文档here

列表中的每个元素都是一个字符串数组 - 具有结构:

  1. 数据
  2. 标题
  3. 文字

因此,如果((loggBok[i]) &gt; loggBok[i + 1])) 在您使用运算符&gt; 比较两个数组时,以下命令将失败。

要检索数据,您将拥有loggBok[i][0],它是一个字符串。 您需要将它们转换为正确的类型(例如 int)才能使用比较运算符 &gt;

我假设数据是 int 类型 -

                if (int.TryParse(loggBok[i][0], out int currentElement) && 
                    int.TryParse(loggBok[i + 1][0], out int nextElement) && 
                    currentElement > nextElement)
                {
                    string[] temp = loggBok[i + 1];
                    loggBok[i + 1] = loggBok[i];
                    loggBok[i] = temp;
                }

您可以阅读 TryParse here

【讨论】:

  • 工作就像一个魅力。我在想它必须以这种方式解决,但语法不正确。谢谢队友:D
  • @Maxkristiansson 相信它有效。请考虑通过单击该复选标记来投票并接受答案!谢谢
  • 完成,但我的投票不会显示,因为我还没有投票给 15 个答案:(
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-25
  • 2022-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-16
相关资源
最近更新 更多