Perl - Roundrobin通过数组的哈希

Tak*_*kun 1 perl loops round-robin

my %aggrs_by_node = (
    node1 => ['a1_1','a1_2'],
    node2 => ['a2_1','a2_2','a2_3'],
    hello => ['ah_1','ah_2','ah_3'],
    node3 => ['a3_1','a3_2','a3_3','a3_4'],
);
Run Code Online (Sandbox Code Playgroud)

任何人都有任何关于我如何循环遍历此哈希中的所有数组元素同时避免密钥的建议hello

Iteration 1 = a1_1
Iteration 2 = a2_1
Iteration 3 = a3_1
Iteration 4 = a1_2
Iteration 5 = a2_2
Iteration 6 = a3_2
Iteration 7 = a1_1
Iteration 8 = a2_3
Run Code Online (Sandbox Code Playgroud)

等等...

Bor*_*din 6

这个简短的程序可以满足您的要求.它将索引的哈希值保存到每个数组中.

我在数组中使用了一个单独的哈希键排序列表,@keys因为直接从哈希中获取它们会导致不可预测的顺序,看起来你需要按特定的顺序输出.

use strict;
use warnings;

my %aggrs_by_node = (
  node1 => ['a1_1','a1_2'],
  node2 => ['a2_1','a2_2','a2_3'],
  hello => ['ah_1','ah_2','ah_3'],
  node3 => ['a3_1','a3_2','a3_3','a3_4'],
);

my %indices = map { $_ => 0 } keys %aggrs_by_node;
delete $indices{hello};
my @keys = sort keys %indices;

for my $iter (1 .. 20) {
  my $key = $keys[($iter - 1) % @keys];
  my $val = $aggrs_by_node{$key}[$indices{$key}];
  $indices{$key} = ($indices{$key} + 1) % @{ $aggrs_by_node{$key} };
  printf "Iteration %d = %s\n", $iter, $val;
}
Run Code Online (Sandbox Code Playgroud)

产量

Iteration  1 = a1_1
Iteration  2 = a2_1
Iteration  3 = a3_1
Iteration  4 = a1_2
Iteration  5 = a2_2
Iteration  6 = a3_2
Iteration  7 = a1_1
Iteration  8 = a2_3
Iteration  9 = a3_3
Iteration 10 = a1_2
Iteration 11 = a2_1
Iteration 12 = a3_4
Iteration 13 = a1_1
Iteration 14 = a2_2
Iteration 15 = a3_1
Iteration 16 = a1_2
Iteration 17 = a2_3
Iteration 18 = a3_2
Iteration 19 = a1_1
Iteration 20 = a2_1
Run Code Online (Sandbox Code Playgroud)