2016-04-23 59 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); 
相關問題