列表中的排序算法
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]) > loggBok[i + 1])
替换为if ((loggBok[i][0]) > loggBok[i + 1][0]))
(也是右括号)。这将比较日期。
应该是 logbok.add() 而不是 Add。还有 logbok.size() 而不是 logbok.Size()。
【参考方案1】:
一些问题:
if ((loggBok[i]) > loggBok[i + 1])
缺少右括号
上述尝试比较数组,而您只想比较日期。所以你需要引用loggBok[i]
中的日期条目:
if ((loggBok[i][0]) > loggBok[i + 1][0]))
i
索引指的是数组(三元组),因此您不应将其增加三个,而只增加一个,因为当您执行 i++
时,它将转到下一个三元组,这就是您想要的。所以删除i = i + 2
,否则你会跳过其中的一些三元组。
【讨论】:
谢谢你的朋友,我现在添加了C#语言。我进行了更改,引用的东西是有道理的,但我仍然遇到同样的错误,或者至少现在它不是说字符串数组,而只是字符串。 CS0019 运算符“>”不能应用于“字符串”和“字符串”类型的操作数【参考方案2】:运算符>
大于不能应用于类型数组或类型字符串(如其他答案评论中所述) - 请查看文档here
列表中的每个元素都是一个字符串数组 - 具有结构:
-
数据
标题
文字
因此,如果((loggBok[i]) > loggBok[i + 1]))
在您使用运算符>
比较两个数组时,以下命令将失败。
要检索数据,您将拥有loggBok[i][0]
,它是一个字符串。
您需要将它们转换为正确的类型(例如 int)才能使用比较运算符 >
。
我假设数据是 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 个答案:(以上是关于列表中的排序算法的主要内容,如果未能解决你的问题,请参考以下文章