如何使有序列表反向排序?我必须自定义 IComparer 吗?

发布于 2024-11-11 14:22:18 字数 99 浏览 3 评论 0原文

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

我必须重写 icomparer 吗?

In a sortedlist queue, queue.value[0] gives the corresponding value of a min key. what if i would like to make that it gives the value of a max key?

Do i have to rewrite the icomparer?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

西瓜 2024-11-18 14:22:18

是的,您必须重写

字符串作为键的比较器示例:(只需将 x.CompareTo(y)y.CompareTo(x) 交换)

private class InvertedComparer : IComparer<String>
    {
        public int Compare(string x, string y)
        {
            return y.CompareTo(x);
        }
    }

并调用:

SortedList<string, Object> list = new SortedList<string, Object>(new InvertedComparer());

Yes you have to rewrite the comparer

example for string as key: (just exchanged x.CompareTo(y) with y.CompareTo(x) )

private class InvertedComparer : IComparer<String>
    {
        public int Compare(string x, string y)
        {
            return y.CompareTo(x);
        }
    }

and the call:

SortedList<string, Object> list = new SortedList<string, Object>(new InvertedComparer());
如此安好 2024-11-18 14:22:18

下面是链接,指向实现 ReversibleSortedList.这允许更改排序方向。

如果您总是想要反向排序行为而无法按需更改它,我会尝试 接受 IComparer

Here's a link to an article that implements a ReversibleSortedList. This allows for changing the sort direction.

In case you always want reversed sort behavior without the ability to change it on demand, I'd try the constructor that accepts an IComparer.

隱形的亼 2024-11-18 14:22:18

在一些简单的情况下只需使用 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

Just use Array.Reverse() in some simple cases.

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);
    }
    }
}

* Output *

1
2
3

3
2
1

1
2
3
¢蛋碎的人ぎ生 2024-11-18 14:22:18

您可以反转任何现有的 IComparers。类似于:

public static IComparer<T> Invert<T>(this IComparer<T> comparer)
{
    return Comparer<T>.Create((x, y) => comparer.Compare(y, x));
}

并使用常规比较器。例如

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

You could just invert any existing IComparers. Something like:

public static IComparer<T> Invert<T>(this IComparer<T> comparer)
{
    return Comparer<T>.Create((x, y) => comparer.Compare(y, x));
}

And use your regular comparer. For e.g.

new SortedList<,>(myShinyComparer.Invert());
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文