列表中的排序算法

Posted

技术标签:

【中文标题】列表中的排序算法【英文标题】: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()。 【参考方案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

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

    数据 标题 文字

因此,如果((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 个答案:(

以上是关于列表中的排序算法的主要内容,如果未能解决你的问题,请参考以下文章

列表中的排序算法

排序算法之计数排序

一文了解 Python 中的 Timsort 排序算法

python常见的三种列表排序算法分别是啥?

算法——列表排序和排序算法

算法与数据结构