arrays - 对具有字母数字值的哈希数组进行排序

标签 arrays regex perl sorting perl-data-structures

我在对哈希数组进行排序时遇到问题;具有我需要排序的字母数字值的哈希。

引用这个question !我的问题是这个问题的延伸。 我尝试了上述问题的解决方案,但没有得到所需的输出。

$arr_ref = [
  { brand => "A.1", PO => "1.a", supplier => "X" },
  { brand => "A.2", PO => "2.a", supplier => "X" },
  { brand => "B.1", PO => "1.b", supplier => "X" },
  { brand => "B.2", PO => "2.b", supplier => "X" },
  { brand => "B.3", PO => "1.c", supplier => "Y" },
]

我需要按品牌或采购订单排序。

#sort the array reference and place the array back into the standard_set
$arr_ref = [sort by_brand @$arr_ref];
sub by_brand {
    $a->{brand} cmp $b->{brand}
}

复杂性是关键;可以以数字或字母字符开头。 品牌或 PO 也可以有不同的大小。分隔符可以是点或连字符。

我们能否根据 $arr_ref 中收到的输入来解决这个问题?

最佳答案

你们真的很亲密。您只需删除 [] 括号并取消引用要分配给 @$array_ref = ... 的数组。

use strict;
use warnings;

my $arr_ref = [
  { brand => "B.3", PO => "1.c", supplier => "Y" },
  { brand => "B.2", PO => "2.b", supplier => "X" },
  { brand => "B.1", PO => "1.b", supplier => "X" },
  { brand => "A.2", PO => "2.a", supplier => "X" },
  { brand => "A.1", PO => "1.a", supplier => "X" },
];

my @sorted = sort { $a->{brand} cmp $b->{brand} } @$arr_ref;

use Data::Dump;
dd @sorted;

输出:

(
  { brand => "A.1", PO => "1.a", supplier => "X" },
  { brand => "A.2", PO => "2.a", supplier => "X" },
  { brand => "B.1", PO => "1.b", supplier => "X" },
  { brand => "B.2", PO => "2.b", supplier => "X" },
  { brand => "B.3", PO => "1.c", supplier => "Y" },
)

关于arrays - 对具有字母数字值的哈希数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24199190/

相关文章:

perl - 我可以在数组中收集find(\&wanted,@directories)的输出

linux - 以不同的用户身份运行 cgi 脚本

javascript - 使用 $.ajax 返回 HTML 并将其转换为 JavaScript 数组

Python:迭代数组的行和列

JavaScript 取消移动每个数组元素

python - 如何用正则表达式匹配整个单词?

JavaScript 正则表达式获取引号字符串中的单词

javascript - 正则表达式:获取逗号之前最后一个字符出现之间的字符串

perl - 谁能解释为什么 foreach 有效但 map 无效

c - 在我的函数数组中没有获得正确的计数器