2016-05-25 7 views
0

Sortierung ich einige Probleme mit versuchen, eine Liste von Strukturen in Elixir zu sortieren ...Elixir Enum.sort nicht richtig

Ich kann nicht herausfinden, was ich falsch mache.

IO.puts "########### MY TOP 5 #############" 
IO.inspect mytop5 
IO.puts "=================================" 
sorted = Enum.sort_by(mytop5, &(&1.count)) 
IO.inspect sorted 
IO.puts "------------------------" 

Hier ist das Ergebnis

iex(67)> ########### MY TOP 5 ############# 
iex(67)> [%{count: "3", from: "AUD", rate: 0.64536947, to: "EUR"}, 
%{count: "10", from: "USD", rate: 1.3876, to: "AUD"}, 
%{count: "11", from: "USD", rate: 0.89726335, to: "EUR"}] 
iex(67)> ================================= 
iex(67)> [%{count: "3", from: "AUD", rate: 0.64536947, to: "EUR"}, 
%{count: "11", from: "USD", rate: 0.89726335, to: "EUR"}, 
%{count: "10", from: "USD", rate: 1.3876, to: "AUD"}] 
iex(67)> ------------------------ 

während:

iex(3)> [%{plop: "aze", count: 5, name: "a"}, %{plop: "aze", count: 1, name: "p"}, %{plop: "aze", count: 45, name: "e"}] |> Enum.sort_by(&(&1.count)) 
[%{count: 1, name: "p", plop: "aze"}, %{count: 5, name: "a", plop: "aze"}, 
%{count: 45, name: "e", plop: "aze"}] 

Antwort

5

Diese basiert die Sortierung auf count ist ein String:

Enum.sort(["3", "10", "5"])# ["10", "3", "5"] 
Enum.sort([3, 10, 5])  # [3, 5, 10] 

Dies liegt daran, "10" < "3" ist tru e aufgrund des ersten Zeichens:

Enum.sort(["30", "9", "10", "1", "100", "3"]) 
# ["1", "10", "100", "3", "30", "9"] 

Sie String.to_integer/1 es konvertieren können:

Enum.sort_by(mytop5, &(String.to_integer(&1.count))) 
+0

Verdammt, ich auf die Tatsache nicht einmal bezahlt haben Aufmerksamkeit, die es ein String und kein Integer war! Danke. +1 – TheSquad