Tag: hashset

有没有办法在c#中获得两组对象之间的差异?

我想在c#中获得两组int之间的区别。 给定s1和s2我想返回那些在s1而不在s2中的int。 我可以做一些事情,比如: List s1 = new List(); List s2 = new List(); foreach (int i in s1) { if (s1.Contains(i)) { // } else { // } } 但我想知道是否有人能指出更清洁的东西。 我想做点什么 List omitted = s1.Difference(s2); 不确定是否有任何人可能指出的现有方法或LINQ结构? 谢谢。

HashSet 是最容易查找的容器吗?

我需要检查特定字符串是否包含在其他组中: private bool Contains(string field) { return this.Fields.Contains(field); // HashSet local property } 如果只有一个任务,那么最好使用的容器类型是什么 – 持有多个字符串并检查是否有另一个容器?

使用Dictionary和HashSet的GetHashCode方法

我有一个关于Dictionary和HashSet如何在C#中工作的问题。 根据我的理解,GetHashCode用于哈希表以确定密钥唯一性。 在以下MSDN页面上,它指出: 哈希码是一个数值,用于插入和标识基于散列的集合中的对象,例如Dictionary类,Hashtable类或从DictionaryBase类派生的类型。 链接: MSDN Object.GetHashCode 如果是这种情况,为什么当包含与car1相同的哈希码时,ContainsKey和Contains会为car2返回false? 如果我的理解是正确的,如果MSDN说的是正确的,那么这两个都不应该返回真的吗? class Program { static void Main(string[] args) { // Create a Dictionary and HashSet Dictionary carDictionary = new Dictionary(); HashSet carSet = new HashSet(); // Create 3 Cars (2 generic and 1 Civic) Car car1 = new Car(); Car car2 = new Car(); Car car3 = […]

检查与对象的HashSet的相等性

我试图比较Definition类型的两个哈希集作为EqualityComparer.Default.Equals(value, oldValue) 。 Definition定义如下 public class Definition { public string Variable { get; set; } public HashSet LocationList { get; set; } public override bool Equals(object obj) { Definition other = obj as Definition; return other.Variable.Equals(this.Variable) && other.LocationList!= null &&this.LocationList != null && other.LocationList.Count == this.LocationList.Count && other.LocationList == this.LocationList; } public override int GetHashCode() […]

默认情况下,使用数学集相等性设置类

HashSet不使用set equality语义进行默认的相等操作。 var a = new HashSet { 1, 2, 3 }; var b = new HashSet { 3, 2, 1 }; 这评估为false : var c = a == b; 而在数学意义上,这两组是相等的。 我们当然可以使用SetEquals显式比较使用set equality: var d = a.SetEquals(b); // true 如果我们创建一组这些集合: var e = new HashSet<HashSet> { a, b }; 结果包含两个元素。 我们需要传递一个自定义比较器来获取父集的语义。 这是HashSet的子类,默认情况下实现set语义。 public sealed class […]

HashSet或Distinct用于读取对象的List 中的不同属性值

这在某种程度上与此相关( 获取C#列表中的所有唯一项 )问题。 上面的问题是谈论一个简单的数组。 我有从第三方Web服务返回的对象: public class X { public Enum y {get; set;} } 我有一个列表这些对象List data; ,总共约100条记录,但可变。 现在我想要属性y列表中的所有可能值,并且我想绑定它做一个CheckBoxList.DataSource (如果有所不同)。 这是最有效的方法吗? 我可以想到两种算法: var data = HashSet hashSet = new HashSet(xs.Select(s => sy)); chkBoxList.DataSource = data; 要么 var data = xs.Select(s => sy).Distinct(); chkBoxList.DataSource = data; 我的直觉是HashSet,但我不是百分百肯定。 如果有人有任何想法,愿意接受更好的想法?

重新排序任意整数数组

我有一个方法接受一个整数数组作为参数,我只是改变其值的顺序任意 public static int[] _game_number = new int[4]; public static int[] _current_number = new int[4]; public static void GetRandomTwentyFour() { HashSet nums = new HashSet(); for (int i = 0; i < 4; i++) { Random r = new Random(); nums.Add(r.Next(0, 4)); } List liste = nums.ToList(); _current_number = new int[] { _game_number[liste[0]], _game_number[liste[1]], _game_number[liste[2]], […]

HashSet (IEqualityComparer )的查找时间复杂度是多少?

在C#.NET中,我喜欢使用HashSets,因为它们的查找时间复杂度为O(1)。 如果我要查询大量数据,我通常更喜欢将HashSet用于List,因为它具有这种时间复杂性。 令我困惑的是HashSet的构造函数,它将IEqualityComparer作为参数: http://msdn.microsoft.com/en-us/library/bb359100.aspx 在上面的链接中,备注注意到“构造函数是一个O(1)操作”,但如果是这种情况,我很好奇,如果查找仍然是O(1)。 特别是,在我看来,如果我要编写一个Comparer来传递给HashSet的构造函数,每当我执行查找时,必须在每个键上执行Comparer代码以检查是否存在一场比赛。 这不是O(1),而是O(n)。 当元素添加到集合中时,实现是否在内部构建查找表? 总的来说,我如何确定有关.NET数据结构复杂性的信息?

为什么HashSet 类不用于实现Enumerable.Distinct

我需要以大O表示法访问IEnumerable.Distinct的渐近时间和空间复杂度 所以我在看扩展方法Enumerable.Distinct的实现,我看到它是使用和内部类Set ,这几乎是一个带有“开放寻址”的哈希表的经典实现 很快引起注意的是Set中的很多代码只是来自HashSet的复制粘贴,有一些遗漏 但是,这个简化的Set实现有一些明显的缺陷,例如Resize方法不使用素数作为槽的大小,比如HashSet ,看看HashHelpers.ExpandPrime 所以,我的问题是: 这里代码重复的原因是什么,为什么不坚持DRY原则? 特别是考虑到这两个类都在同一个程序集System.Core 看起来HashSet会表现得更好,所以我应该避免使用Distinct扩展方法,并编写我自己的扩展方法,使用HashSet而不是Set ?

C# – 使用自定义键定义hashset

我在C#中使用HashSet和Dictionary来实现Graph结构。 当HashSet键是自定义类时,我对HashSet元素的唯一性有问题。 我在这里: public class Point { public int x { get; set; } public int y { get; set; } } public class Vertex { public Vertex(Point point) { VertexLabel = point; } public Point VertexLabel { get; private set; } } public class Edge { public Edge(Vertex to, Vertex from, double weight) { […]