[英]C# WFA - How to make a string list sort in the same positions as a sorted integer list
我正在尝试为自己制作的问答游戏制作高分系统。 我已经读取了所有乐谱及其名称,对乐谱进行排序并将其放在富文本框中(一个代表乐谱,一个代表他们的名字)。 在整数列表(分数.Sort()
上使用.Sort()
之后,分数按正确的顺序排列,但名称(字符串列表)不再与分数匹配。
这是我的代码:
public partial class frmhighScore : Form
{
public frmhighScore()
{
InitializeComponent();
this.StartPosition = FormStartPosition.CenterScreen;
this.Name = "High Score";
}
string[] contains;
string[] scorenames;
List<int> scores = new List<int>(){ };
List<string> names = new List<string>(){ };
private void highScore_Load(object sender, EventArgs e)
{
scores.Clear();
names.Clear();
scorenames = File.ReadAllLines(AppDomain.CurrentDomain.BaseDirectory + "scorenames.txt");
foreach (string line in scorenames)
{
gameClass.scorenames.Add(line);
}
for (int x = 0; x < gameClass.scorenames.Count(); x++)
{
contains = gameClass.scorenames[x].Split(':');
names.Add(contains[0]);
scores.Add(Convert.ToInt32(contains[1]));
}
scores.Sort();
scores.Reverse();
for (int a = 0; a < scores.Count; a++)
{
}
for (int y = 0; y < names.Count(); y++)
{
richTextBox1.Text += names[y];
richTextBox1.Text += Environment.NewLine;
}
for (int z = 0; z < scores.Count(); z++)
{
richTextBox2.Text += scores[z];
richTextBox2.Text += Environment.NewLine;
}
}
}
gameClass.scorenames是我的课程中的字符串列表,用于从文本文件中读取详细信息。 所有其他变量都是局部变量。
richTextBox1用于名称, richTextBox2用于分数
这是当前表单外观的屏幕截图:
这是我正在从(scorenames.txt)中读取的文本文件:
r:6
bob:10
如您所见,名称与排序的分数不匹配
所以我的最后一个问题是,如何使名称(bob / r)与它们的分数匹配r为4,bob为10 ?
任何帮助将不胜感激,谢谢。
我认为您只需要对显示实体进行建模即可将“名称”和“分数”捆绑在一起。 您可能需要更改代码,使其类似于下面的代码段(不过,我没有处理新的行格式)
public class DisplayCard
{
public int Score { get; set; }
public string Name { get; set; }
}
List<DisplayCard> ScoreCard = new List<DisplayCard>();
for (int x = 0; x < gameClass.scorenames.Count(); x++)
{
contains = gameClass.scorenames[x].Split(':');
var name = contains[0];
var score = Convert.ToInt32(contains[1]);
ScoreCard.Add(new DisplayCard { Name = name, Score = score });
}
var sortedCard = ScoreCard.OrderBy(o => o.Score).ToList();
foreach (var card in sortedCard)
{
richTextBox1.Text += card.Name;
richTextBox2.Text += card.Score;
/* take care of new line logic*/
}
您可以为每个球员创建对象,包括他们的得分。 然后使用LINQ按分数对它们进行排序,然后将保留其名称的关联: https : //msdn.microsoft.com/zh-cn/library/bb534966.aspx
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.