如何为Dictionary值中的SortedSet使用自定义比较器
解决字典中SortedSet的自定义比较器初始化问题
你可以通过以下几种方式给字典值中的SortedSet<Transaction>指定自定义比较器:
1. 添加键值对时直接初始化
当你向字典中添加新的交易状态对应的集合时,直接创建带CustomComparer的SortedSet实例:
// 假设status是某个TransactionStatus枚举值 _transactionsByStatus.Add(status, new SortedSet<Transaction>(new CustomComparer()));
2. 预先初始化所有枚举状态的集合
如果TransactionStatus是枚举类型,你可以遍历所有枚举值,提前创建好带比较器的集合:
// 复用同一个比较器实例,减少对象创建开销 var customComparer = new CustomComparer(); foreach (TransactionStatus status in Enum.GetValues(typeof(TransactionStatus))) { _transactionsByStatus.Add(status, new SortedSet<Transaction>(customComparer)); }
3. 按需创建(访问时自动初始化)
如果不想提前创建所有集合,可以在需要访问某个状态的集合时,检查是否存在,不存在则创建带比较器的实例:
TransactionStatus targetStatus = ...; // 目标交易状态 if (!_transactionsByStatus.TryGetValue(targetStatus, out var transactionSet)) { transactionSet = new SortedSet<Transaction>(new CustomComparer()); _transactionsByStatus[targetStatus] = transactionSet; } // 此时transactionSet就是带自定义比较器的集合,可直接使用
需要注意的是,如果所有集合的排序规则一致,建议复用同一个CustomComparer实例,避免重复创建对象,提升代码效率。
内容的提问来源于stack exchange,提问作者NUM1NEX
相关产品推荐
相关产品推荐

