以下是代码:
#!/usr/bin/perl
my %hash = (1..20);
foreach (sort {$a <=> $b} keys %hash)
{
print "\n$_ -> $hash{$_} ";
}
输出:
1 -> 2
3 -> 4
5 -> 6
7 -> 8
9 -> 10
11 -> 12
13 -> 14
15 -> 16
17 -> 18
19 -> 20
Perl选择第一个元素作为键,将下一个元素作为值。也就是说,列表的替代值被视为键。并且其间的价值为其价值。
是否可以控制此分配?
喜欢 -
我有一个清单(1..20) 是否可以将下两个元素作为值分配给键?
我需要修改my %hash = (1..20)
才能实现相同目标。
1 -> (2,3)
4 -> (5,6)
7 -> (8,9)
10 -> (11,12)
13 -> (14,15)
等...
答案 0 :(得分:2)
use List::MoreUtils 'natatime';
my $it = natatime 3, (1 .. 20);
my %hash;
while (my ($k, @vals) = $it->()) {
$hash{$k} = \@vals;
}
use Data::Dump;
dd \%hash;
输出
{
1 => [2, 3],
4 => [5, 6],
7 => [8, 9],
10 => [11, 12],
13 => [14, 15],
16 => [17, 18],
19 => [20],
}
答案 1 :(得分:1)
这是一种仅使用核心Perl工具的方法:
use Data::Dumper;
my @list = ( 1..21 );
my %hash;
while ( @list ) {
my ($key, @vals) = splice( @list, 0, 3 );
$hash{$key} = \@vals;
}
print Dumper \%hash;
导致:
$VAR1 = {
'4' => [
5,
6
],
'1' => [
2,
3
],
'7' => [
8,
9
],
'19' => [
20,
21
],
'16' => [
17,
18
],
'13' => [
14,
15
],
'10' => [
11,
12
]
};
然而,它具有破坏原始数组值的缺点。