我正在尝试按HoA中的值排序,其中key => [a,b,c] 我想按字母顺序排序,并且尝试阅读并没有成功。我认为是逗号,但请帮忙!以下是一个简短的摘要。原始数据与数据转储相对于CLI的显示方式完全相同。我必须使用某种定界符,否则cli输出是乏味的!谢谢!
$Item = $InfoPathLibrary.GetItemById(Convert.ToInt32($ItemID))
输出
A: 0x00000008 => '0x00000008, atgdb003f_avg01, hdisk10, atgdb003f_ovg01, hdisk96, atgdb003f_pvg01, hdisk68, atgdb003f_rvg01, hdisk8, vtscsi0, atgdb003f_data.5bcd027df10f27bf9a880ce7bc1dd924' === B: 0x00000008 => '0x00000008, atgdb003f_avg01, hdisk10, atgdb003f_data, atgdb003f_data.5bcd027df10f27bf9a880ce7bc1dd924, atgdb003f_ovg01, hdisk96, atgdb003f_pvg01, hdisk68, atgdb003f_rvg01, hdisk8' __DATA_DUMPER__ $VAR1 = { '0x00000008' => [ '0x00000008', 'atgdb003f_avg01', 'hdisk10', 'atgdb003f_ovg01', 'hdisk96', 'atgdb003f_pvg01', 'hdisk68', 'atgdb003f_rvg01', 'hdisk8', 'vtscsi0', 'atgdb003f_data.5bcd027df10f27bf9a880ce7bc1dd924' ] }; $VAR1 = { '0x00000008' => [ '0x00000008', 'atgdb003f_avg01', 'hdisk10', 'atgdb003f_data', 'atgdb003f_data.5bcd027df10f27bf9a880ce7bc1dd924', 'atgdb003f_ovg01', 'hdisk96', 'atgdb003f_pvg01', 'hdisk68', 'atgdb003f_rvg01', 'hdisk8' ] }; ### CLI out ### ###0x00000008,atgdb003f_avg01,hdisk10,atgdb003f_ovg01,hdisk96,atgdb003f_pvg01,hdisk68,atgdb003f_rvg01,hdisk8,vtscsi0,atgdb003f_data.5bcd027df10f27bf9a880ce7bc1dd924 ###0x00000008,atgdb003f_avg01,hdisk10,atgdb003f_data,atgdb003f_data.5bcd027df10f27bf9a880ce7bc1dd924,atgdb003f_ovg01,hdisk96,atgdb003f_pvg01,hdisk68,atgdb003f_rvg01,hdisk8
答案 0 :(得分:3)
更新。arrayrefs(哈希值)毕竟具有多个元素,需要进行排序。然后
for my $key (keys %h) { @{$h{$key}} = sort @{$h{$key}} }
或更有效地†(并且以statement modifier的形式,具有较少的噪音但可能不太清晰)
$h{$_} = [ sort @{$h{$_}} ] for keys %h;
sort默认情况下根据需要使用字典排序。
希望对键进行数字排序,但是请注意,尽管我们可以重写数组以使其进行排序,但哈希本来就不是这样,哈希本质上是无序的。我们当然可以打印排序
foreach my $k (sort { $a <=> $b } keys %h) { ... }
如果键不是数字,则会发出警告。
† 在三台不同的计算机(分别是v5.16和v5.30.0)上,按我的基准测试,分别为56%– 60%
原始帖子
我认为您需要对一个哈希进行排序,该哈希具有一个值的arrayref,其中该arrayref具有单个元素。然后排序,首先是元素
foreach my $key ( sort { $hashB{$a}->[0] cmp $hashB{$b}->[0] } keys %hashB ) {
print "$key ==> @{$hashB{$key}}\n";
}
请参见Equality operators in perlop下的cmp
运算符。它需要标量,并按字符串进行比较(因此,尝试对问题中的数组进行排序是错误的,因为cmp
将获得要排序的那些数组的长度!)
据我了解,您要排序的哈希就像
$VAR1 = {
'0x00000008' => [ 'atgdb003f_avg01,hdisk10,atgdb003f_ovg01,...' ],
...
}
其中每个值都是具有一个元素的arrayref。