反向排序字典在.NET字典、NET

2023-09-02 01:33:05 作者:追梦

有什么办法,我可以在C#中向后遍历(反向)通过SortedDictionary?

Is there any way I can iterate backwards (in reverse) through a SortedDictionary in c#?

或者是有没有办法来定义SortedDictionary降序排列开始呢?

Or is there a way to define the SortedDictionary in descending order to begin with?

推荐答案

该SortedDictionary本身不支持向后迭代,但是你有几种方法可以实现同样的效果。

The SortedDictionary itself doesn't support backward iteration, but you have several possibilities to achieve the same effect.

使用 .Reverse - 方法(LINQ)。 (这将有pre-计算整个字典输出,但是最简单的解决方案)

Use .Reverse-Method (Linq). (This will have to pre-compute the whole dictionary output but is the simplest solution)

var Rand = new Random();


var Dict = new SortedDictionary<int, string>();


for (int i = 1; i <= 10; ++i) {
    var newItem = Rand.Next(1, 100);
    Dict.Add(newItem, (newItem * newItem).ToString());
}


foreach (var x in Dict.Reverse()) {
    Console.WriteLine("{0} -> {1}", x.Key, x.Value);
}

万能词典.Net 词库查询翻译助手 V1.0.0.2 正式版

请按降序排列的字典排序。

Make the dictionary sort in descending order.

class DescendingComparer<T> : IComparer<T> where T : IComparable<T> {
    public int Compare(T x, T y) {
        return y.CompareTo(x);
    }
}


// ...


var Dict = new SortedDictionary<int, string>(new DescendingComparer<int>());

使用排序列表&LT; TKEY的,TValue&GT; 代替。的表现并不好(而不是O(LOGN)为O(n))作为字典的,但你必须随机接入的像数组中的元素。当您使用通用的IDictionary接口,你不会有改变你的code中的其余部分。

Use SortedList<TKey, TValue> instead. The performance is not as good as the dictionary's (O(n) instead of O(logn)), but you have random-access at the elements like in arrays. When you use the generic IDictionary-Interface, you won't have to change the rest of your code.

:迭代上SortedLists

Edit :: Iterating on SortedLists

您只需通过索引访问元素!

You just access the elements by index!

var Rand = new Random();


var Dict = new SortedList<int, string>();

for (int i = 1; i <= 10; ++i) {
    var newItem = Rand.Next(1, 100);
    Dict.Add(newItem, (newItem * newItem).ToString());
}

// Reverse for loop (forr + tab)
for (int i = Dict.Count - 1; i >= 0; --i) {
    Console.WriteLine("{0} -> {1}", Dict.Keys[i], Dict.Values[i]);
}