我有一个字符串的列表,其值来自一个固定的集合。我需要按任意顺序对此列表进行排序。如何以任意顺序对Perl列表进行排序?
该集合的顺序由另一个所有可能的字符串列表指定,按照数组顺序排列。
下面是一个例子:
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()的时候了。
您的示例显示“@all_possible_strings_in_order”,但您随后说“由于程序的结构,无法提前完成序号哈希的自动生成”。你可以解释吗?我敢肯定,下面的一些算法可能会被重新调整,以重建散列错过,但怎么可能取决于“程序结构”。 ;) – zen 2009-12-08 04:37:39
该程序反复运行,每次运行时都必须从头构建数据结构。它适合于一个更大的生态系统。我想可以采取一些措施来使其持续下去,但有更高的优先事项。 – NXT 2009-12-08 04:50:38
使用长度为10个字符的300个密钥的Xeon [email protected]的快速基准测试:7325/s使用散列片,3065/s使用映射。这是守护进程的限制,冷启动会根据负载降低20-30%或更多。 – zen 2009-12-08 05:20:47