Làm cách nào để chọn khóa băm ngẫu nhiên? Đối với my Flash+Perl card game Tôi đang cố gắng để chọn một thẻ ngẫu nhiên từ một hash nơi các phím như sau: "6 Spades", "6 câu lạc bộ", vv như thế này:Chọn một khóa ngẫu nhiên từ mã băm
my $card;
my $i = 0;
for $card (keys %{$user->{HAND}}) {
last if rand(++$i) < 1;
}
delete $user->{HAND}->{$card};
print "random card: $card\n";
Tôi tự hỏi nếu đó là cách đúng hoặc nếu có là một cách tốt hơn.
Không đúng chút nào. Thẻ '$' trong vòng lặp' for' là ["ẩn cục bộ với vòng lặp và lấy lại giá trị cũ của nó khi thoát khỏi vòng lặp"] (http://search.cpan.org/perldoc?perlsyn#Foreach_Loops). Tức là, '$ card' trong bản in của bạn là một biến khác với' $ card' trong vòng lặp 'for'. – mob
Hơn nữa, Thực tế là bạn tạo ra một số mới mỗi vượt qua skews kết quả. – ikegami