【发布时间】:2020-09-16 01:04:11
【问题描述】:
这是一个非常简单的问题,但我无法解决它。我有一个哈希数组。数据结构如下:
my @unsorted = (
{
'key_5' => '14.271 text',
# ...
},
{
'key_5' => 'text',
# ...
},
{
'key_5' => '13.271 text',
# ...
},
{
'key_5' => 'etext',
# ...
},
);
如何根据哈希的key_5 对数组进行排序。字符串部分应按字母顺序排序。并且键是number string(格式总是这样),它应该按数字排序(完全忽略字符串部分)。所以输出看起来像:
my @sorted = (
{
'key_5' => 'etext',
# ...
},
{
'key_5' => 'text',
# ...
},
{
'key_5' => '13.271 text',
# ...
},
{
'key_5' => '14.271 text',
# ...
},
);
因此,数组元素根据散列元素的key_5 进行排序。
重要提示:不能使用本机 perl 安装未附带的任何 perl 软件包。使用 perl 5.18
【问题讨论】:
-
除非这是一个家庭作业(在这种情况下你不应该寻求我们的帮助),你绝对可以使用非核心模块的函数。您可以使用
local::lib并将其安装到您的主目录(或等效目录)。您可以将模块放入项目的lib/子目录并从那里使用它。最坏的情况是,只要它是纯 Perl 模块(Sort::Key::Natural 是),您就可以将相关代码直接复制/粘贴到您的程序中。 (而 S::K::N 仅 104 行长,因此如果您愿意,甚至可以将整个模块复制到源文件中。) -
@DaveSherohman 首先,这不是家庭作业。其次,我不允许安装任何将用于生产的库。我知道这只是复制粘贴,但这样做会违反机构的规则。所以我的手被绑在已经安装的模块上。
-
@DaveSherohman:我不认为
Sort::Key::Natural是纯粹的 Perl,因为我看到了Key.xs。但是,看起来Sort::Naturally可能是,而且可能是合适的。 -
@toolic - 公平点。我只看了 S::K::N 本身的来源,忘记检查它的依赖关系。
标签: perl sorting numeric alphabetical-sort