在.NET GetHashCode方法中,很多地方都使用.NET 方法.特别是在快速查找集合中的项目或确定相等性时.是否有关于如何GetHashCode为我的自定义类实现覆盖的标准算法/最佳实践,因此我不会降低性能?
我反编译了一些C#7库并看到了使用的ValueTuple泛型.是什么ValueTuples以及为什么不Tuple呢?
数组可以用作哈希表中的键吗?如何使用数组键引用哈希表项?
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) 我觉得很愚蠢,我无法弄清楚这一点,但假设我有一个包含 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) .net ×2
powershell ×2
algorithm ×1
arrays ×1
c# ×1
c#-7.0 ×1
compare ×1
comparison ×1
gethashcode ×1
hashcode ×1
tuples ×1