私は、文字列配列の最後の要素がソートキーであるリストをソートしたいと思います。 。私はこの作品リスト<string[]>ソートが機能しません
(下キーで)トップ5の結果を必要とするが、私は、LINQを使用したくない:
...
List<string[]> gameResults = OpenResults(fileLocation);
gameResults.Add(CurrentPlayerResult());
var newOrderedGameResults =
from line in currentGameResults
orderby int.Parse(line.LastOrDefault())
select line;
...
しかし、これはそうではない。
public void SaveResults(string fileLocation = @"..\..\GameResults.txt")
{
// string[] format:
// [0],..,[n-1], [n]
// names, mistakeCount
List<string[]> gameResults = OpenResults(fileLocation);
gameResults.Add(CurrentPlayerResult());
QuickSort(gameResults, 0, gameResults.Count - 1);
try
{
using (StreamWriter resultsFile = new StreamWriter(fileLocation))
{
foreach (var line in gameResults.Take(5))
{
for (int i = 0; i < line.Length - 1; i++)
{
resultsFile.Write("{0} ", line[i]);
}
// dont add " " after last element
resultsFile.WriteLine("{0}", line[line.Length - 1]);
}
}
}
catch (IOException exception)
{
Console.WriteLine("The file could not be write:");
Console.WriteLine(exception.Message);
}
:
private void QuickSort(List<string[]> listToSort, int left, int right)
{
int pivot = left; //(left + right)/2;
int leftHold = left;
int rightHold = right;
while (left < right)
{
while (GetScoreFromLine(listToSort[right]) >= pivot && left < right)
{
right--;
}
if (left != right)
{
listToSort[left] = listToSort[right];
left++;
}
while (GetScoreFromLine(listToSort[left]) <= pivot && left < right)
{
left++;
}
if (left != right)
{
listToSort[right] = listToSort[left];
right--;
}
}
listToSort[left] = listToSort[pivot];
pivot = left;
left = leftHold;
right = rightHold;
if (left < pivot)
{
QuickSort(listToSort, left, pivot - 1);
}
if (right > pivot)
{
QuickSort(listToSort, pivot + 1, right);
}
}
そして:
private int GetScoreFromLine(string[] lineToParce)
{
int length = lineToParce.Length;
return int.Parse(lineToParce[length - 1]);
}
正常に動作しません。
ARRAY.SORTを使用する方法はありますか? 誰でも手伝ってください。おかげさまで
問題を再現するために必要最小限のコード*を減らすことを検討してもよいでしょうか? 'List'についてLINQを使わないでソートすることを考えると、それほど難しくないと思います。 –
yamen
なぜあなたはLINQを使いたくないのですか?また、通常の.Netソート方法を使用できないのはなぜですか? –
ウェズリーワイザー、私は実装する方法を知っていません。ネットリストを並べ替え。あなたがリンクを例題に送ることができるなら、それは役に立ちます。 listToSortがintでGetScoreFromLine(listToSort [left/right])が単なる数値の場合、そのvoidとsortは正常に機能します。 –