Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/311.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# 如何使分类列表反向排序?我必须定制一个IComparer吗?_C#_Sortedlist - Fatal编程技术网

C# 如何使分类列表反向排序?我必须定制一个IComparer吗?

C# 如何使分类列表反向排序?我必须定制一个IComparer吗?,c#,sortedlist,C#,Sortedlist,在sortedlist队列中,queue.value[0]给出了最小键的对应值。如果我想让它给出max key的值,该怎么办 我必须重写icomparer吗?这里有一篇文章,它实现了一个可逆列表。这允许更改排序方向 如果您总是希望反向排序行为而不需要按需更改,我会尝试使用构造函数。是的,您必须重写比较器 字符串作为键的示例:(刚刚与y.CompareTo(x)交换了x.CompareTo(y)) 私有类反相器比较程序:IComparer { 公共整数比较(字符串x、字符串y) { 返回y.Com

在sortedlist队列中,queue.value[0]给出了最小键的对应值。如果我想让它给出max key的值,该怎么办

我必须重写icomparer吗?

这里有一篇文章,它实现了一个
可逆列表。这允许更改排序方向


如果您总是希望反向排序行为而不需要按需更改,我会尝试使用构造函数。

是的,您必须重写比较器

字符串作为键的示例:(刚刚与
y.CompareTo(x)
交换了
x.CompareTo(y)

私有类反相器比较程序:IComparer
{
公共整数比较(字符串x、字符串y)
{
返回y.CompareTo(x);
}
}
电话:

SortedList<string, Object> list = new SortedList<string, Object>(new InvertedComparer());
SortedList=新的SortedList(新的反相器比较程序());

在一些简单的情况下只需使用
Array.Reverse()

using System;

class Program
{
    static void Main()
    {
    // Input array.
    int[] array = { 1, 2, 3 };

    // Print.
    foreach (int value in array)
    {
        Console.WriteLine(value);
    }
    Console.WriteLine();

    // Reverse.
    Array.Reverse(array);

    // Print.
    foreach (int value in array)
    {
        Console.WriteLine(value);
    }
    Console.WriteLine();

    // Reverse again.
    Array.Reverse(array);

    // Print.
    foreach (int value in array)
    {
        Console.WriteLine(value);
    }
    }
}
*输出*

1
2
3

3
2
1

1
2
3

您可以反转任何现有的iComparer。比如:

public static IComparer<T> Invert<T>(this IComparer<T> comparer)
{
    return Comparer<T>.Create((x, y) => comparer.Compare(y, x));
}
公共静态IComparer反转(此IComparer比较器)
{
返回Comparer.Create((x,y)=>Comparer.Compare(y,x));
}
使用你的常规比较器。例如

new SortedList<,>(myShinyComparer.Invert());
newsortedList(myShinyComparer.Invert());

如果您只在最大密钥中查询,那么列表很大,性能是关键,您应该查看优先级队列()@larsm-我认为优先级队列是在C#中使用sortedlist/sortedDirectionary实现的。这不是真的吗?那将是一个糟糕的实现。优先级队列只要求第一个项目top是min/max元素,它对列表中的其余项目没有要求。通过利用这一点,优先级队列可能比完全排序的列表/字典更有效。通常,优先级队列是使用堆实现的(请参阅)
new SortedList<,>(myShinyComparer.Invert());