繁体   English   中英

C#WFA-如何使字符串列表在与排序的整数列表相同的位置进行排序

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM