相关疑难解决方法(0)

重写System.Object.GetHashCode的最佳算法是什么?

在.NET GetHashCode方法中,很多地方都使用.NET 方法.特别是在快速查找集合中的项目或确定相等性时.是否有关于如何GetHashCode为我的自定义类实现覆盖的标准算法/最佳实践,因此我不会降低性能?

.net algorithm hashcode gethashcode

1389
推荐指数
14
解决办法
19万
查看次数

120
推荐指数
5
解决办法
4万
查看次数

使用数组作为哈希表中的键

数组可以用作哈希表中的键吗?如何使用数组键引用哈希表项?

PS C:\> $h = @{}
PS C:\> $h[@(1,2)] = 'a'
PS C:\> $h

Name                           Value
----                           -----
{1, 2}                         a         # looks like the key is a hash

PS C:\> $h[@(1,2)]                       # no hash entry
PS C:\> $h.Keys                          # 
1
2
PS C:\> $h[@(1,2)] -eq 'a'
PS C:\> $h[@(1,2)] -eq 'b'
PS C:\> foreach ($key in $h.Keys) { $key.GetType() }   # this is promising

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     Object[]                                 System.Array

PS C:\> $PSVersionTable.PSVersion.ToString() …
Run Code Online (Sandbox Code Playgroud)

powershell

7
推荐指数
1
解决办法
1150
查看次数

如果 pscustomobject 已存在,则防止将其添加到数组中

我觉得很愚蠢,我无法弄清楚这一点,但假设我有一个包含 pscustomobjects 的数组。以令人难以置信的高水平来看以下示例:

$arr = @()
$obj1 = [pscustomobject]@{prop1="bob";prop2="dude";prop3="awesome"}
$obj2 = [pscustomobject]@{prop1="bob";prop2="dude";prop3="awesome"}

$arr += $obj1
Run Code Online (Sandbox Code Playgroud)

在本例中,$obj1 和 $obj2 具有完全相同的项目/属性。如何测试 $testarr 是否包含 $obj1 的属性以避免将 $obj2 添加到其中?

请注意,上面是一个粗略的例子。pscustomobjects 是从数据集动态创建的并添加到数组中,但我想避免添加重复项。

我理解以下返回 true,但我完全期望任何给定的单个属性都有重复项。因此,我需要将整个 pscustomobject 和所有属性一起比较以获得唯一性。

$arr.Name -Contains 'Bob' #returns true

附带问题...为什么 $obj1 和 $obj2 本身不被视为相等?我认为这是因为它们在技术上是不同的对象,只是具有相同的值,但我不明白为什么会这样,但是两个不同的变量只有一个字符串测试是相同的。

$obj1 -eq $obj2  #returns false
$str1 = "test"
$str2 = "test"
$str1 -eq $str2  #returns true
Run Code Online (Sandbox Code Playgroud)

arrays powershell comparison compare pscustomobject

5
推荐指数
1
解决办法
805
查看次数