gpt4 book ai didi

perl嵌套哈希多重排序

转载 作者:行者123 更新时间:2023-12-05 01:09:29 27 4
gpt4 key购买 nike

我的结构看起来像这样(哈希的哈希):

$VAR1 = {
'Lee2000a' => {
'abstract' => 'Abstract goes here',
'author' => 'Lee, Wenke and Stolfo, Salvatore J'
'title' => 'Data mining approaches for intrusion detection'
'year' => '2000'
},
'Forrest1996' => {
'abstract' => 'Abstract goes here',
'author' => 'Forrest, Stephanie and Hofmeyr, Steven A. and Anil, Somayaji'
'title' => 'Computer immunology'
'year' => '1996'
}
};

我想根据三个条件(按此顺序)对这个结构进行排序:

第 1 - 根据年份值 (1996,2000)第二 - 根据“外部”(Lee2000a,Forrest1996)结构键第三 - 根据“内部”结构键(摘要、作者、标题、年份)按字母顺序排列。

到目前为止,我有两个代码需要以某种方式组合:

我。代码满足第二和第三标准

for $i (sort keys(%bibliography)){
print "$i => ", "\n";
for $j (sort keys ($bibliography{"$i"})){
print "\t $j -> ", $bibliography{"$i"}{"$j"},"\n";
}
}

二。代码满足第一个条件

for $i (sort { ($bibliography{$a}->{year} || 0) <=> ($bibliography{$b}->{year} || 0) } keys %bibliography){
print "$i => ", "\n";
for $j (sort keys ($bibliography{"$i"})){
print "\t $j -> ", $bibliography{"$i"}{"$j"},"\n";
}
}

非常感谢

最佳答案

要按次要条件排序,您可以使用逻辑或:

my @sorted = sort {
$a{c1} <=> $b{c1} ||
$a{c2} <=> $b{c2}
} @unsorted

此示例将按键 c1@unsorted 中的哈希进行排序,然后,如果此比较相等,则按键 c2 .

为了您的目的,您可以通过这种方式组合外部循环的两个排序比较,以便您的排序 block 将读取:

(($bibliography{$a}->{year} || 0) <=> ($bibliography{$b}->{year} || 0)) ||
($a cmp $b)

关于perl嵌套哈希多重排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13801758/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com