Vb.net希望使用字典,就像perl中的哈希表



我在perl中有以下代码,它生成随机值,直到达到值的数量。哈希表总是将随机值存储在相同的"位置",因此当存储足够的值时,哈希表具有合适的大小

while ( (keys( %unique_regex )) <= $amount_regex){
    $unique_regex{ $pass->randregex($regex) } = '1';
}

现在我想在vb.net中使用字典做同样的事情,但我必须设置键,因此值在我的哈希表/字典中不止一次。

 Dim myDict As New Dictionary(Of Integer, String)
 myDict.Add(0, CStr(Math.Round((((Rnd() Mod 3) * ((input_zufallszahl_obergrenze_1.Value) - input_zufallszahl_untergrenze_1.Value)) + ((input_zufallszahl_untergrenze_1.Value))), 0)))

 Dim tmphashcounter As Integer = 1
 While (myDict.Count <= array_integerzahlen.GetLength(0))
     myDict.Add(tmphashcounter, CStr(Math.Round((((Rnd() Mod 3) * ((input_zufallszahl_obergrenze_1.Value) - input_zufallszahl_untergrenze_1.Value)) + ((input_zufallszahl_untergrenze_1.Value))), 0)))
     tmphashcounter = tmphashcounter + 1
 End While

我认为同源词应该是这样的:

While myDict.Count <= array_integerzahlen.GetLength(0)
    randRegex = pass.randRegex( regex )
    If Not myDict.ContainsKey( randRegex )
        myDict.Add( randRegex, 1 )
    End If
End While

当然,因为你指出它是。net,你只需要使用索引属性。我认为这可能行得通:

While myDict.Count <= array_integerzahlen.GetLength(0)
    myDict( pass.randRegex( regex )) = True
End While

在。net中,您不会为此使用字典,您将使用HashSet:

Dim mySet As New HashSet(Of Integer)()
Dim lower = input_zufallszahl_untergrenze_1.Value
Dim upper = input_zufallszahl_obergrenze_1.Value
Dim rng As New Random()
Do While mySet.Count < DesiredSize
    mySet.Add(rng.Next(lower, upper))
Loop

你的随机数生成也有严重缺陷。除了明显的缺陷(CStr在那里做什么?)您可能应该避免使用Rnd来支持适当的随机数生成器,并且通过Mod 3生成数字会在随机数中引入偏差-它们甚至不再远程均匀分布。这就是Random.Next方法的作用。

注意,用于添加随机数的实际代码只有三行长——与Perl代码完全相同。

相关内容

最新更新