Mam listę ciągów, których wartości pochodzą z ustalonego zestawu. Muszę posortować listę w dowolnej kolejności.Jak mogę posortować listę Perla w dowolnej kolejności?
Kolejność zestawu jest określona przez inną listę wszystkich możliwych ciągów, posortowaną w kolejności w tablicy.
Oto przykład:
my @all_possible_strings_in_order = ('name', 'street', 'city','state', 'postalcode');
my @list_that_needs_to_be_sorted = ('city', 'state', 'name');
pracuję w Perlu. Myślę, że najlepiej jest automatycznie utworzyć mieszanie, które łączy łańcuchy z liczbami porządkowymi, a następnie sortować według tych liczb porządkowych.
Istnieje około 300 możliwych ciągów w zestawie. Typowe listy będą miały 30 ciągów, które należy posortować. Nie będzie to wywoływane w ciasnej pętli, ale nie może też być wolne. Automatyczne budowanie haszu porządkowego nie może być wykonane z wyprzedzeniem ze względu na strukturę programu.
Jestem otwarty na sugestie dotyczące lepszych sposobów na zrobienie tego. Dzięki!
Edytuj: Jesteście niesamowici. Nie mogę dziś więcej wytrzymać, ale jutro rano poświęcam czas, aby naprawdę zrozumieć twoje sugestie ... Najwyższy czas, abym stał się biegły w zakresie map() i grep().
Twój przykład pokazuje „@all_possible_strings_in_order”, ale potem powiedzieć „Automatycznie budowy porządkowej hash nie może być wykonane z wyprzedzeniem ze względu na strukturę programu.” Możesz wytłumaczyć? Jestem pewien, że niektóre z algos poniżej mogły zostać dostrojone do odbudowy po nieudanych próbach, ale w jaki sposób mogą zależeć od "struktury programu". ;) – zen
program jest uruchamiany wielokrotnie, a za każdym razem, gdy jest uruchamiany, musi budować struktury danych od zera. Pasuje do znacznie większego ekosystemu. Sądzę, że można coś zrobić, aby było trwałe, ale są wyższe priorytety. – NXT
Szybki test porównawczy na xeonie [email protected] za pomocą 300 kluczy o długości 10 znaków wynosi: 7325/s przy użyciu skrótu mieszającego, 3065/s przy użyciu mapy. To jest limit demona, zimny start obniży to o 20-30% lub więcej w zależności od obciążenia. – zen