gpt4 book ai didi

perl - perl 中的自定义数组排序

转载 作者:行者123 更新时间:2023-12-04 13:24:58 25 4
gpt4 key购买 nike

我有一个 perl 待办任务数组,如下所示:

@todos = (
"1 (A) Complete online final @evm4700 t:2010-06-02",
"3 Write thank-you t:2010-06-10",
"4 (B) Clean t:2010-05-30",
"5 Donate to LSF t:2010-06-02",
"6 (A) t:2010-05-30 Pick up dry cleaning",
"2 (C) Call Chris Johnson t:2010-06-01"
);

第一个数字是任务的 ID。如果任务旁边有 ([A-Z]),则定义任务的优先级。我想要做的是以将优先项目放在首位的方式对任务数组进行排序(并按优先级从 A - Z 降序排列):
@todos = (
"1 (A) Complete online final @evm4700 t:2010-06-02",
"6 (A) t:2010-05-30 Pick up dry cleaning",
"4 (B) Clean t:2010-05-30",
"2 (C) Call Chris Johnson t:2010-06-01"
"3 Write thank-you t:2010-06-10",
"5 Donate to LSF t:2010-06-02",
);

我不能使用普通 sort()由于任务旁边的那些 ID,所以我假设需要某种定制的排序子例程。但是,我对如何在 perl 中有效地做到这一点的了解很少。

谢谢,所有。

最佳答案

听起来您想要 Schwartzian transform :

@todos =
map { $_->[0] }
sort { $a->[1] cmp $b->[1] or $a->[0] cmp $b->[0] }
map { [ $_, /^\d+ \(([[:alpha:]])\)/ ? $1 : "[" ] }
@todos;

“[”是“Z”后面的字符;将此“优先级”赋予其他非优先项目将在优先项目之后对它们进行排序。

或者,也许更容易理解:
@todos =
map { substr $_, 1 }
sort
map { (/^\d+ \(([[:alpha:]])\)/ ? $1 : "[") . $_ }
@todos;

关于perl - perl 中的自定义数组排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2939773/

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