2015-06-03 13 views
9

Mam listę ciągów, które chcę zamówić na dwa sposoby.Elementy listy sortowania w Elixir Lang

  1. Alfabetycznie
  2. Przy długości łańcucha
+4

Co masz na myśli mówiąc "bez pętli"? Operacja sortowania musi przejść przez listę. W każdym razie, być może Enum.sort/2 jest tym, czego szukasz? –

+0

@ JoséValim Masz rację. Zmieniłem to pytanie, aby nie wprowadzało w błąd. Moduł Enum ma wszystko, czego potrzebuję. Czy możesz to opublikować jako odpowiedź? –

Odpowiedz

23

Aby posortować listę ciągów alfabetycznie, można po prostu użyć Enum.sort/1, który zleci elementy według ich kolejności domyślnej (co jest alfabetyczna kolejność ciągów).

iex> Enum.sort(["b", "aaa", "cc"]) 
["aaa", "b", "cc"] 

Aby posortować listę według innej właściwości, takie jak długość łańcucha, można użyć Enum.sort_by/2, która przyjmuje funkcję odwzorowujący jako drugi argument. Wartości zostaną następnie posortowane według wyniku tej funkcji zastosowanego do każdego elementu.

iex> Enum.sort_by(["b", "aaa", "cc"], &String.length/1) 
["b", "cc", "aaa"]