c# dictionary<string,string> order by key asc empty value at the end
我有一个包含键和值的
有一个键为空。
如何按字母顺序排列字典并在底部/末端添加空键?
可以将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); } } } |