2016-04-23 109 views
1

嗨,大家在排序包含我在制作的游戏的排行榜形式中的不同用户的分数的多维数组时遇到了一些麻烦。我尝试使用临时变量以降序对每个用户的分数进行排序,然后输出这些没有成功。任何帮助将不胜感激谢谢。我应该补充一点,我最近才开始编写代码,并且必须将这个项目作为我的学校工作的一部分,所以我意识到它可能不是非常有效,看起来很新手。使用临时变量对多维数组进行排序

这里是我的排序
方法([I,2]是作为字符串存储的分数值)

private void sortScore(string[,] sort) 
{ 
    bool didSwap; 
    do 
    { 
     didSwap = false; 
     for (int i = 0; i < userNumber; i++) 
     { 
      if (i < (userNumber-1)) 
      { 
       if (Convert.ToInt32(sort[i, 2]) > Convert.ToInt32(sort[i + 1, 2])) 
       { 
        string temp = sort[i + 1, 2]; 
        sort[i + 1, 2] = sort[i, 2]; 
        sort[i, 2] = temp; 
       } 
      }    
     } 
    } while (didSwap); 
    for (int j = 0; j < userNumber; j++) 
    { 
     rtbScoreboard.AppendText("Name: " + sort[j, 0] + "\t" + "Score: " + sort[j, 2] + Environment.NewLine); 
    } 
} 
+0

你能解释一下你的投入和预期产出用一个例子? –

+0

你正在升序排序:Convert.ToInt32(sort [i,2])> Convert.ToInt32(sort [i + 1,2] – jdweng

回答

1

您可以使用LINQ!

var sortedScores = Enumerable.Range(0, sort.GetLength(0)) //number of items 
.Select(x => new 
{ 
    Name = sort[x, 0], 
    Score = Convert.ToInt32(sort[x, 2]) 
}) //converting to a meaningful structure 
.OrderByDescending(x => x.Score) //sort in descending order by score 
.ToList(); 

//building output, I don't know what is userNumber, It is a global variable 
// that might store number of players to show in score board. 
for (int j = 0; j < userNumber; j++) 
{ 
    rtbScoreboard.AppendText("Name: " + sortedScores[j].Name + "\t" + "Score: " + sortedScores[j].Score + Environment.NewLine); 
} 

您不应该存储那样的数据。使用多维数组来存储名称和分数并不是一个好主意。尝试定义类似Player的类,该类具有用于存储数据的属性,如NameScore。然后将Player的实例存储在列表中。

+0

我知道这不是存储用户详细信息的最佳方式,但不幸的是我们被告知要用二进制文件做这个项目的一部分,感谢您的回复 –

+1

刚刚尝试过你的方法,并且完美地工作,这要感谢我需要在这个周末完成这个项目,所以非常感谢你帮助我,我刚开始编码,所以仍然在学习,所以有时候我不确定如何最好地解决不同的问题 –

0

您未能didSwap设置为true

bool didSwap; 
do 
{ 
    didSwap = false; 
    for (int i = 0; i < userNumber-1; i++) 
    { 
     if (Convert.ToInt32(sort[i, 2]) > Convert.ToInt32(sort[i + 1, 2])) 
     { 
      string temp = sort[i + 1, 2]; 
      sort[i + 1, 2] = sort[i, 2]; 
      sort[i, 2] = temp; 
      didSwap = true; 
     }   
    } 
} while (didSwap);