c# dictionary<字符串,string>按键asc最后的空值排序
本文关键字:asc 按键 最后的 空值 排序 string dictionary 字符串 | 更新日期: 2023-09-27 18:07:17
我有一个包含键和值的Dictionary<string,string>
。
有一个键是null/empty
如何按键字母顺序排列字典并在底部/末尾添加空键?
您可以使用SortedDictionary与自定义比较器。并相应地进行排序。
但就像一般的建议:如果排序对你来说很重要,字典通常不是适合处理这种需求的数据结构。A Dictionary<TKey,TValue>
没有订单。它的后台存储是一个哈希表。如果你想对它施加一个顺序,使用SortedDictionary<TKey,TValue>
:它的后台存储是一个红黑树(高度平衡二叉树)。
您应该记住,WRT在内存使用,插入/删除/查找成本方面存在权衡。
您可能还需要提供一个合适的比较器来强制执行所需的排序。
如果你需要一个比较null-high的比较器(大多数内置的比较器都是null-low的),像这样的东西应该足够了:
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);
}
}
}