自從我們今年開始學習基礎知識以來,我的編碼并不是那么好,而且我的隊友沒有做任何事情來幫助我,所以我迷路了,想尋求所有專家的幫助這里。
我想知道如何正確地對文本框中的混合資料進行排序(我正在使用 console.application 訪問 windows.Forms,因為這是我們的教授希望我們做的)。正如您在下圖中看到的那樣,它是按字母順序排列的,而不是在分數旁邊按玩家姓名降序排列分數。
void show_Click(object sender, EventArgs e)
{
int counter = 0;
string line;
StreamReader TXT = new StreamReader("Leaderboard.txt");
List<string> list = new List<string>();
while ((line = TXT.ReadLine()) != null)
{
ListB1.Items.Add(line);
list.Add(line);
counter ;
}
string[] arr = list.ToArray();
Array.Sort(arr);
Array.Reverse(arr);
foreach (string item in arr)
{
ListB2.Items.Add(item);
}
這只是我整個代碼的一小部分,但我認為這是讓我的排行榜正常運行最重要的部分。
到目前為止,這就是我的代碼的結果......
uj5u.com熱心網友回復:
目前,您正在將檔案的每一行作為單個字串讀取。所以“分數”和“文本”沒有區別,都只是一個文本值。
聽起來您想要的是將該資訊決議為具有兩個不同屬性的物件。例如,假設你有這個類:
public class ScoreListing
{
public int Score { get; set; }
public string Text { get; set; }
}
那么您的串列將類似于:
List<ScoreListing> list = new List<ScoreListing>();
要添加到它,您需要從中決議資訊line以創建新ScoreListing物件。例如,它可能看起來像這樣:
while ((line = TXT.ReadLine()) != null)
{
var elements = line.Split(' | ');
var listing = new ScoreListing
{
Score = int.Parse(elements[0]),
Text = elements[1]
};
list.Add(listing);
counter ;
}
填充List<ScoreListing>后,您可以使用 對其進行排序.OrderBy(),例如:
var sortedLeaderboard = list.OrderByDescending(l => l.Score);
有多種方法可以處理資料的存盤、對資料進行排序等。但總的來說,當你有一個這樣的值時"123 | SomeText",你真正擁有的是一個具有兩個不同屬性的自定義序列化物件。將這些資料讀入記憶體時,您的第一個目標應該是將其反序列化為有意義的物件。然后,您可以隨意使用該物件。
根據要求,有關將資料轉換回字串的更多資訊......
最面向物件的方法是覆寫.ToString()類:
public class ScoreListing
{
public int Score { get; set; }
public string Text { get; set; }
public override string ToString()
{
return $"{Score} | {Text}";
}
}
然后你可以將它添加到你的字串串列中:
foreach (var item in sortedLeaderboard)
{
ListB2.Items.Add(item.ToString());
}
如果不覆寫.ToString(),您只需手動執行相同的操作:
foreach (var item in sortedLeaderboard)
{
ListB2.Items.Add($"{item.Score} | {item.Text}");
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/522137.html
標籤:C#表格控制台应用程序
下一篇:有沒有辦法讓輸入全域化?
