相关疑难解决方法(0)

为什么有HashSet但没有在C#中设置?

老问题

我的理解是C#在某种意义上HashSetset类型上都有.我明白什么HashSet是.但为什么set是一个单独的词呢?为什么不是每一套都是HashSet<Object>

新问题

为什么C#没有泛型Set类型,类似于Dictionary类型?从我的角度来看,我希望有一个具有标准查找/添加/删除性能的集合.我不关心它是用哈希还是别的来实现的.那么为什么不创建一个实际上HashSet在这个版本的C#中实现的集合类,但在将来的版本中可能有些不同?

或者为什么不至少接口ISet

回答

感谢所有在下面回答的人:ICollection实现了很多你期望的东西ISet.但是,从我的观点来看,ICollection实现IEnumerable虽然集合不必是可枚举的 - 例如:1到2之间的实数集合(更多,集合可以动态生成).我同意这是一个小咆哮,因为"普通程序员"很少需要不可数集.

好的,我想我明白了.HashSet绝对意味着被召唤,Set但这个词Set在某种意义上是保留的.更具体地说,.NET体系结构的创建者希望为不同的语言提供一致的集合(sic!).这意味着标准类的每个名称都不得与.NET语言中的任何关键字一致.Set然而,这个词在VB.NET中使用,它实际上是不区分大小写的(是吗?),所以遗憾的是那里没有空间可操作.

谜团已揭开 :)

结语

Alex Y.的新答案链接到MSDN页面,该页面描述了即将推出的.NET 4.0界面ISet,该界面的行为与我认为的应该完全相同并且由其实现HashedSet.好结局.

c# set hashset

25
推荐指数
3
解决办法
1万
查看次数

如何使用不同的元素创建HashSet <List <Int >>?

我有一个包含多个整数列表的HashSet - 即 HashSet<List<int>>

为了保持唯一性,我目前不得不做两件事:1.手动循环现有列表,查找重复项SequenceEquals.2.对各个列表进行排序,使其SequenceEquals当前正常工作.

有一个更好的方法吗?是否存在可以提供给HashSet的现有IEqualityComparer,以便HashSet.Add()可以自动处理唯一性?

var hashSet = new HashSet<List<int>>();

for(/* some condition */)
{
    List<int> list = new List<int>();

    ...

    /* for eliminating duplicate lists */

    list.Sort();

    foreach(var set in hashSet)
    {
        if (list.SequenceEqual(set))
        {
            validPartition = false;
            break;
        }
    }

    if (validPartition)
           newHashSet.Add(list);
}
Run Code Online (Sandbox Code Playgroud)

谢谢 !

c# collections hashset distinct-values

7
推荐指数
2
解决办法
4802
查看次数

标签 统计

c# ×2

hashset ×2

collections ×1

distinct-values ×1

set ×1