c#dictionary< string,string>

c# dictionary<string,string> order by key asc empty value at the end

我有一个包含键和值的Dictionary

有一个键为空。

如何按字母顺序排列字典并在底部/末端添加空键?


可以将SortedDictionary与自定义比较器一起使用。并进行相应的分类。

但是,正如一般的建议:如果排序对您很重要,那么字典通常不适合处理这种需求的数据结构。


Dictionary没有订单。它的备份存储是一个哈希表。如果要对其强制执行命令,请使用SortedDictionary:它的后备存储是红黑树(高度平衡二叉树)。

您应该记住,对于内存使用、插入/删除/查找的成本,有一些权衡。

您可能还需要提供适当的比较器来强制执行所需的顺序。

如果您需要一个比较空值高的比较器(大多数内置比较器都是空值低),那么这样的比较器就足够了:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
public class MyCustomStringComparer : IComparer<string>
{
    private readonly StringComparer    baseComparer    ;
    private readonly StringComparison? comparisonStyle ;
    public MyCustomStringComparer( StringComparer baseComparer ) : this( baseComparer , null )
    {
    }
    public MyCustomStringComparer( StringComparison comparisonStyle ) : this( null , comparisonStyle )
    {
    }
    public MyCustomStringComparer() : this( null , null )
    {
    }
    private MyCustomStringComparer( StringComparer comparer , StringComparison? style )
    {
        this.baseComparer = comparer ;
        this.comparisonStyle = style ;
    }
    public int Compare( string x , string y )
    {
        if      ( x == null && y == null ) return  0 ; // two nulls are equal
        else if ( x == null && y != null ) return +1 ; // null is greater than non-null
        else if ( x != null && y == null ) return -1 ; // non-null is less than null
        else // ( x != null && y != null ) ;
        {
            if      ( baseComparer    != null ) return baseComparer.Compare(x,y);
            else if ( comparisonStyle != null ) return string.Compare(x,y,comparisonStyle.Value);
            else                                return x.CompareTo(y);
        }
    }
}