gpt4 book ai didi

perl - 在哈希 perl 数组中按数字和字母顺序对数字和字符串进行排序

转载 作者:行者123 更新时间:2023-12-04 15:26:56 24 4
gpt4 key购买 nike

这是一个非常简单的问题,但我无法解决。我有一个哈希数组。数据结构如下:

my @unsorted = (
{
'key_5' => '14.271 text',
# ...
},
{
'key_5' => 'text',
# ...
},
{
'key_5' => '13.271 text',
# ...
},
{
'key_5' => 'etext',
# ...
},
);

如何根据散列的 key_5 对数组进行排序。字符串部分应按字母顺序排序。 key是number string(格式总是这样),应该按数字排序(完全忽略字符串部分)。所以输出看起来像:

my @sorted = (
{
'key_5' => 'etext',
# ...
},
{
'key_5' => 'text',
# ...
},
{
'key_5' => '13.271 text',
# ...
},
{
'key_5' => '14.271 text',
# ...
},
);

因此,数组元素根据散列元素的 key_5 进行排序。

重要提示:不能使用任何未随 native perl 安装一起提供的 perl 包。使用 perl 5.18

最佳答案

使用 Sort::Key::Natural :

use Sort::Key::Natural qw( natkeysort );

my @sorted = natkeysort { $_->{key_5} } @unsorted;

以上根据您的输入生成以下内容:

[
{
'key_5' => '13.271 text'
# ...
},
{
'key_5' => '14.271 text'
# ...
},
{
'key_5' => 'etext'
# ...
},
{
'key_5' => 'text'
# ...
},
]

如果这还不够好,您可以使用以下方法:

use Sort::Key::Multi qw( unskeysort );   # uns = (u)nsigned int, (n)umber, (s)tring

my @sorted =
unskeysort {
$_->{key_5} =~ /^([0-9.]+)\s+(.*)/s
? ( 1, $1, $2 )
: ( 0, 0, $_->{key_5} )
}
@unsorted;

关于perl - 在哈希 perl 数组中按数字和字母顺序对数字和字符串进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62069381/

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