你如何选择随机哈希密钥?对于我的Flash + Perl纸牌游戏,我试图从哈希中选择一张随机牌,其中键是:"6个黑桃","6个俱乐部"等,如下所示:
my $card;
my $i = 0;
for $card (keys %{$user->{HAND}}) {
last if rand(++$i) < 1;
}
delete $user->{HAND}->{$card};
print "random card: $card\n";
Run Code Online (Sandbox Code Playgroud)
我想知道这是正确的方式还是有更好的方法.
enn*_*ler 18
更简洁:
my $random_value = $hash{(keys %hash)[rand keys %hash]};
Run Code Online (Sandbox Code Playgroud)
Fil*_*efp 14
%hash在@hash_keys.0和长度@hash_keys@hash_keys%hash示例代码段:
my %hash = (
'stack' => 'overflow',
'face' => 'book',
'inter' => 'net'
);
Run Code Online (Sandbox Code Playgroud)
## ALTERNATIVE 1 ##
my @hash_keys = keys %hash;
my $random_key = $hash_keys[rand @hash_keys];
my $random_value = $hash{$random_key};
Run Code Online (Sandbox Code Playgroud)
## ALTERNATIVE 2 ##
my $random_val_2 = (%hash)[1+2*int rand keys%hash]; # TIMTOWTDI
Run Code Online (Sandbox Code Playgroud)
## ALTERNATIVE 3 ##
my $random_val_3 = [@_=%hash]->[1|rand@_]; # TIMTOWTDI
Run Code Online (Sandbox Code Playgroud)