使用嵌套循环和子字符串方法(C#)对数组进行排序



我正在尝试使用字符串输入手动对数组进行排序,该字符串输入以我想要从最高到最低排序的数字结尾。

例如,我可以从以下输出开始:,姓名1:1540,姓名2:2660,姓名3:80,名称4:380

最后应该是这样的:,姓名2:2660,姓名1:1540,姓名:4380,名称3:80

private string[] OrderHighToLow(string[] data)
{
string temp;
for (int i = 0; i < data.Length; i++)
{
for (int y = 0; y < i; y++)
{
if (int.Parse(data[y].Substring((data[y].IndexOf(':') + 2))) > int.Parse(data[i].Substring((data[i].IndexOf(':') + 2)))) 
{
temp = data[i];
data[i] = data[y];
data[y] = temp;
}
}
}
return data;
}

这是我测试过的。据我说,这应该有效,但关键是它没有,应用程序只是崩溃了。所以,如果这里有人能弄清楚为什么会这样,我将非常感谢。提前谢谢。

您的比较结果为

int.Parse(data[y].Substring((data[y].IndexOf(':') + 2)))

小于不大于

if (int.Parse(data[y].Substring((data[y].IndexOf(':') + 2))) < int.Parse(data[i].Substring((data[i].IndexOf(':') + 2)))) 

这应该在System.Linq:的帮助下完成工作

private string[] OrderHighToLow(string[] data)
{
//create a temporary dictionary, which makes sorting easier
var tmpMap = new Dictionary<string, int>();
foreach (var item in data)
{
//split the string 
var elems = item.Split(":");
//add string and int pair to the dictionary
tmpMap.Add(elems[0], int.Parse(elems[1]));
}
//sort Dictionary by value and use select to rebuild the string, then convert it back to an array
return tmpMap.OrderByDescending(x => x.Value).Select(x => $"{x.Key}: {x.Value}").ToArray();
}

希望这能有所帮助。