gpt4 book ai didi

C# 对包含数字的字符串列表进行排序

转载 作者:行者123 更新时间:2023-11-30 13:19:48 30 4
gpt4 key购买 nike

我正在创建一个读取/写入文本文件的评分系统。我当前的格式读取文件的每一行并将每一行存储到 List<string> 中。 .典型的行类似于 50:James (50 being the score, James being the username) .

我需要按分数对列表进行排序,同时将名称与字符串保持一致。这是我的意思的一个例子:

无序文本文件:

50:James
23:Jessica
70:Ricky
70:Dodger
50:Eric

(请注意有些分数是相同的,这阻碍了我使用数字键创建列表)

有序列表:

70:Dodger
70:Ricky
50:Eric
50:James
23:Jessica

我当前的代码(不适用于两个或更多相同分数)

Dictionary<int, string> scoreLines = new Dictionary<int, string>();

if (!File.Exists(scorePath))
{
File.WriteAllText(scorePath, "No Scores", System.Text.Encoding.ASCII);
}

StreamReader streamReader = new StreamReader(resourcePath + "\\scoreboard.txt");

int failedLines = 0;

while (failedLines < 3)
{
string line = streamReader.ReadLine();

if (String.IsNullOrEmpty(line))
{
failedLines++;
continue;
}

scoreLines.Add(int.Parse(line.Split(':')[0]), line.Split(':')[1]);
}

var arr = scoreLines.Keys.ToArray();
arr = (from a in arr orderby a descending select a).ToArray();

List<string> sortedScoreLines = new List<string>();

foreach (int keyNum in arr)
{
sortedScoreLines.Add(keyNum + ":" + scoreLines[keyNum]);
}

return sortedScoreLines;

是的,我知道这是非常低效和丑陋的,但我花了很长时间尝试了很多不同的方法。

最佳答案

您可以使用 String.Split:

var ordered = list.Select(s => new { Str = s, Split = s.Split(':') })
.OrderByDescending(x => int.Parse(x.Split[0]))
.ThenBy(x => x.Split[1])
.Select(x => x.Str)
.ToList();

编辑:这是一个关于您在 Ideone 上的数据的演示:http://ideone.com/gtRYO7

关于C# 对包含数字的字符串列表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15055971/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com