我有一個字符串的列表,其值來自一個固定的集合。我需要按任意順序對此列表進行排序。如何以任意順序對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