【发布时间】:2012-05-08 20:48:00
【问题描述】:
我想对 List 进行排序,其中字符串数组的最后一个元素是排序键。我需要前 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<string[]>排序而不使用 LINQ,我想这并不难。 -
为什么不想使用 LINQ,为什么不能使用常规的 .Net 排序方法?
-
Wesley Wiser,我不知道如何实现 .net 排序到列表
。如果您可以将链接发送到示例,那将有所帮助。如果 listToSort 是 int 并且 GetScoreFromLine(listToSort[left/right]) 只是一个数字,则它的无效和排序工作正常。 -
@yamen 因为它是就地排序的。
-
我当然不明白,为什么你会主动远离
gameResults.OrderBy(x => int.Parse(x[x.Length - 1]))这样的美女
标签: c# .net string list sorting