gpt4 book ai didi

perl - 如何以任意顺序对 Perl 列表进行排序?

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:44:12 25 4
gpt4 key购买 nike

我有一个字符串列表,其值来自一个固定的集合。我需要整理一下以任意顺序列出。

集合的顺序由所有可能字符串的另一个列表指定,在数组中按顺序排序。

这是一个例子:

my @all_possible_strings_in_order = ('name', 'street', 'city','state', 'postalcode');

my @list_that_needs_to_be_sorted = ('city', 'state', 'name');

我在 perl 工作。我认为我最好的选择是自动创建一个将字符串与序号相关联的散列,然后根据这些序号的引用进行排序。

集合中大约有 300 个可能的字符串。典型的列表将有 30 个需要排序的字符串。这不会在一个紧密的循环中被调用,但它也不能太慢。由于程序的结构,无法提前自动构建序号哈希。

我愿意就更好的方法提出建议。谢谢!

编辑:你们真棒。今晚我再也抬不起头了,但明天早上我会花时间真正理解你的建议......我是时候精通 map() 和 grep() 了。

最佳答案

设置字符串与各自位置之间的关联

# Define your custom order of all possible strings.
my @custom_order = qw/ name street city state postalcode /;

my %order = map +($custom_order[$_] => $_), 0 .. $#custom_order;

现在您可以创建一个与 Perl 的 sort 运算符一起使用的比较函数:

sub by_order { $order{$a} <=> $order{$b} }

例如:

my @sorted = sort by_order qw/ city state name /;
print "@sorted\n";
# prints: name city state

关于perl - 如何以任意顺序对 Perl 列表进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1864267/

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