我在不改变哈希内容的情况下不时地运行哈希.我希望哈希每次都以随机顺序迭代(我知道哈希的内部顺序是随机的,但我需要随机顺序来改变)
我想要的代码如下:
for (my $i=1; $i<=$PopulationsizeA;$i++){
my $P1 = rand;
my $total=0;
my $Parent1='Parent1';
my $P1A;
while ((my $Genotype1, my $Fitness1)=each (%Normalisedfithash)){
$P1A=$P1-$total;
if ($Parent1 eq 'Parent1'){
if ($P1A<=$Fitness1){
$Parent1=$Genotype1;
$P1Tallyhash{$Genotype1}+=1;
}
else{
$total+=$Fitness1;
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我需要%Normalisedfithash的顺序随机更改for循环的每次迭代.我看到了类似的问题,但是我不希望值随机更改键,而是希望键保持其关联值,但随机更改顺序.
谢谢!
fri*_*edo 11
最简单的方法可能是将从哈希中获取的密钥列表改组.shuffle来自List::Util一个很好的实施.
use strict;
use warnings;
use List::Util 'shuffle';
...
foreach my $Genotype1( shuffle keys %Normalisedfithash ) {
my $Fitness1 = $Normalisedfithash{$Genotype1};
}
Run Code Online (Sandbox Code Playgroud)
shuffle 每次都会以不同的顺序洗牌.
编辑:我应该说它每次都会以随机顺序随机播放列表.顺序可能与前一次巧合相同.:)
use List::Util qw(shuffle);
...
foreach my $Genotype1 (shuffle( keys %Normalisedfithash )) {
my $Fitness1 = $Normalisedfithash{$Genotype1};
...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2106 次 |
| 最近记录: |