如何在C#的Dictionary<string, HashSet<string>>中用StringComparer.Ordinal保证HashSet值唯一?
解决方案
要让字典中每个HashSet<string>使用StringComparer.Ordinal保证元素唯一性,核心是在创建HashSet<string>实例时显式传入该比较器——因为HashSet的比较逻辑在初始化时确定,无法后续修改。
1. 初始化字典时直接创建带指定比较器的HashSet
var dict = new Dictionary<string, HashSet<string>>() { { "firstKey", new HashSet<string>(StringComparer.Ordinal) }, { "secondKey", new HashSet<string>(StringComparer.Ordinal) } };
2. 后续向字典中添加新的HashSet
动态添加键值对时,确保新创建的HashSet传入比较器:
// 直接添加键值对 dict.Add("newKey", new HashSet<string>(StringComparer.Ordinal)); // 先实例化HashSet再添加 var newHashSet = new HashSet<string>(StringComparer.Ordinal); newHashSet.Add("value1"); newHashSet.Add("VALUE1"); // 因使用Ordinal,"value1"和"VALUE1"会被视为不同元素 dict.Add("anotherKey", newHashSet);
说明
StringComparer.Ordinal基于字符的Unicode码点做严格比较,不依赖系统文化设置,能精准保证字符串唯一性(区分大小写、区分不同语言的相似字符)。如果需要忽略大小写的序数比较,可改用StringComparer.OrdinalIgnoreCase。
内容的提问来源于stack exchange,提问作者Sharif Mamun
相关产品推荐
相关产品推荐

