Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 列表<;字符串[]>;排序不';行不通_C#_.net_String_List_Sorting - Fatal编程技术网

C# 列表<;字符串[]>;排序不';行不通

C# 列表<;字符串[]>;排序不';行不通,c#,.net,string,list,sorting,C#,.net,String,List,Sorting,我想对列表进行排序,其中字符串数组的最后一个元素是排序键。我需要前5名的结果。(用较低的键) 这是可行的,但我不想使用LINQ: ... List<string[]> gameResults = OpenResults(fileLocation); gameResults.Add(CurrentPlayerResult()); var newOrderedGameResults = from line in currentGameResult

我想对列表进行排序,其中字符串数组的最后一个元素是排序键。我需要前5名的结果。(用较低的键)

这是可行的,但我不想使用LINQ:

    ...
    List<string[]> gameResults = OpenResults(fileLocation);
    gameResults.Add(CurrentPlayerResult());

    var newOrderedGameResults =
    from line in currentGameResults
    orderby int.Parse(line.LastOrDefault())
    select line;
    ...
不工作,没错

有没有使用ARRAY.SORT的方法? 有人能帮忙吗。
谢谢。

以下内容可以满足您的需要:

public void SaveResults(string fileLocation = @"..\..\GameResults.txt")
{
    // string[] format:
    // [0],..,[n-1], [n]
    // names,        mistakeCount 
    List<string[]> gameResults = OpenResults(fileLocation);
    gameResults.Add(CurrentPlayerResult()); 
    gameResults.Sort(CompareResults);
    ...
}

private int CompareResults(string[] left, string[] right)
{
    if ((left == null && right == null) || (left.Length == 0 && right.Length == 0))
        return 0;
    else if (left == null || left.Length == 0)
        return 1;
    else if (right == null || right.Length == 0)
        return -1;

    int leftVal = int.Parse(left[left.Length - 1]);
    int rightVal = int.Parse(right[right.Length - 1]);

    return leftVal.CompareTo(rightVal);
}
public void SaveResults(字符串fileLocation=@.\..\GameResults.txt)
{
//字符串[]格式:
//[0],…[n-1],[n]
//姓名、错误、计数
List gameResults=OpenResults(fileLocation);
gameResults.Add(CurrentPlayerResult());
gameResults.Sort(比较结果);
...
}
私有整数比较结果(字符串[]左,字符串[]右)
{
if((left==null&&right==null)| |(left.Length==0&&right.Length==0))
返回0;
else if(left==null | | left.Length==0)
返回1;
else if(right==null | | right.Length==0)
返回-1;
int leftVal=int.Parse(left[left.Length-1]);
int rightVal=int.Parse(right[right.Length-1]);
返回leftVal.CompareTo(rightVal);
}

以下内容适用于您的需要:

public void SaveResults(string fileLocation = @"..\..\GameResults.txt")
{
    // string[] format:
    // [0],..,[n-1], [n]
    // names,        mistakeCount 
    List<string[]> gameResults = OpenResults(fileLocation);
    gameResults.Add(CurrentPlayerResult()); 
    gameResults.Sort(CompareResults);
    ...
}

private int CompareResults(string[] left, string[] right)
{
    if ((left == null && right == null) || (left.Length == 0 && right.Length == 0))
        return 0;
    else if (left == null || left.Length == 0)
        return 1;
    else if (right == null || right.Length == 0)
        return -1;

    int leftVal = int.Parse(left[left.Length - 1]);
    int rightVal = int.Parse(right[right.Length - 1]);

    return leftVal.CompareTo(rightVal);
}
public void SaveResults(字符串fileLocation=@.\..\GameResults.txt)
{
//字符串[]格式:
//[0],…[n-1],[n]
//姓名、错误、计数
List gameResults=OpenResults(fileLocation);
gameResults.Add(CurrentPlayerResult());
gameResults.Sort(比较结果);
...
}
私有整数比较结果(字符串[]左,字符串[]右)
{
if((left==null&&right==null)| |(left.Length==0&&right.Length==0))
返回0;
else if(left==null | | left.Length==0)
返回1;
else if(right==null | | right.Length==0)
返回-1;
int leftVal=int.Parse(left[left.Length-1]);
int rightVal=int.Parse(right[right.Length-1]);
返回leftVal.CompareTo(rightVal);
}

您可以使用List,这样您也可以使用List.Sort。使用比较器委托,或者如果您坚持使用比较器类

List<string[]> lists = new List<string[]>
{
     new string[] { "1", "b", "5"},
     new string[] { "2", "b", "3"},
     new string[] { "3", "b", "1"},
     new string[] { "4", "b", "2"},
};
lists.Sort((a, b) => int.Parse(a[a.Length - 1]) - int.Parse(b[b.Length - 1]));

这一个几乎是一样的,很好地展示了.NET框架在2005年使用.NET 2.0将泛型添加到CLR中时,多年来的发展是多么的一致。

您使用了List,所以也可以使用List.Sort。使用比较器委托,或者如果您坚持使用比较器类

List<string[]> lists = new List<string[]>
{
     new string[] { "1", "b", "5"},
     new string[] { "2", "b", "3"},
     new string[] { "3", "b", "1"},
     new string[] { "4", "b", "2"},
};
lists.Sort((a, b) => int.Parse(a[a.Length - 1]) - int.Parse(b[b.Length - 1]));

这几乎是相同的,并且很好地显示了.NETFramework在过去2005年中随着Net 2被添加到CLR中的泛型中的一致性。考虑到我们谈论的是一个不使用LINQ的

列表
排序,我想这并不难。为什么不想使用LINQ,为什么不能使用常规的.Net排序方法呢?Wesley Wiser,我不知道如何实现.Net对列表的排序。如果你能发送到例子的链接,这会有所帮助。如果listToSort为int,GetScoreFromLine(listToSort[left/right])只是一个数字,则它是无效的,并且排序可以正常工作。@yamen,因为它已经进行了排序。我确实不明白,为什么您会积极尝试远离像
gameResults.OrderBy(x=>int.Parse(x[x.Length-1])这样的美呢你会考虑把这个减少到最小的必要代码来复制这个问题吗?考虑到我们谈论的是一个不使用LINQ的
列表
排序,我想这并不难。为什么不想使用LINQ,为什么不能使用常规的.Net排序方法呢?Wesley Wiser,我不知道如何实现.Net对列表的排序。如果你能发送到例子的链接,这会有所帮助。如果listToSort为int,GetScoreFromLine(listToSort[left/right])只是一个数字,则它是无效的,并且排序可以正常工作。@yamen,因为它已经进行了排序。我确实不明白,为什么您会积极尝试远离像
gameResults.OrderBy(x=>int.Parse(x[x.Length-1])这样的美呢
比编写自己的分类程序要整洁得多(好吧,这很有趣,但使用排序方法要干净得多)。使用框架的力量!:)比编写自己的分类程序要整洁得多(好吧,这很有趣,但使用排序方法要干净得多)。使用框架的力量!:)
List<string[]> lists = new List<string[]>
{
     new string[] { "1", "b", "5"},
     new string[] { "2", "b", "3"},
     new string[] { "3", "b", "1"},
     new string[] { "4", "b", "2"},
};
lists.Sort((a, b) => int.Parse(a[a.Length - 1]) - int.Parse(b[b.Length - 1]));
var arr = lists.ToArray();
Array.Sort(arr, (a, b) => int.Parse(a[a.Length - 1]) - int.Parse(b[b.Length - 1]));