В основном я пытаюсь получить «рейтинг» между 4 людьми. У меня есть множество очков игроков, которые содержат оценки каждого человека, так что оценка 1 человека указана в индексе 0, оценка человека 2 - по индексу 1 и т. Д. ... Я хочу получить индекс лучшего бомбардира в списке и получить второе, третье и последнее.Сортировка списка и вычисление индекса
Моя попытка решения: Я сделал список из массива playerScores (я чувствую, что это может быть необязательно, но из-за того, что я собираюсь сделать, я не хотел разрушать оригинал баллы), который содержит баллы по порядку. И затем я нахожу максимальное число в списке и получаю его индекс. Затем я меняю значение на отрицательное значение в этом индексе. И затем я повторю шаги.
List<int> listOfScores = new List<int>(playerScores.ToList());
// We get the max value to determine the top scorer of the game
// and then we insert a negative value at that same spot of the list so we can
// continue on figuring out the following max value in the list, etc.
rank1 = listOfScores.IndexOf(listOfScores.Max());
listOfScores[rank1] = -1;
rank2 = listOfScores.IndexOf(listOfScores.Max());
listOfScores[rank2] = -1;
rank3 = listOfScores.IndexOf(listOfScores.Max());
listOfScores[rank3] = -1;
rank4 = listOfScores.IndexOf(listOfScores.Max());
listOfScores[rank4] = -1;
Я чувствую, что могу сделать это в гораздо более эффективным образом, и как менее грязный, как этот код ... Ну, это также при условии, что отрицательный не оценка человек может получить. Есть ли другой способ, чтобы быть более эффективным, чем это? А если скажете, что мы хотим иметь отрицательные оценки?
Почему вы не можете просто использовать listOfScores.Sort(); ? http://msdn.microsoft.com/en-us/library/b0zbh7b6.aspx – ccKep
listOfScores.Sort() сортирует результаты по порядку, но не отслеживает их предыдущие индексы. – skyjlv