32 lines
1.2 KiB
Plaintext
32 lines
1.2 KiB
Plaintext
defmodule Optional_parameters do
|
|
def sort( table, options\\[] ) do
|
|
options = options ++ [ ordering: :lexicographic, column: 0, reverse: false ]
|
|
ordering = options[ :ordering ]
|
|
column = options[ :column ]
|
|
reverse = options[ :reverse ]
|
|
sorted = sort( table, ordering, column )
|
|
if reverse, do: Enum.reverse( sorted ), else: sorted
|
|
end
|
|
|
|
defp sort( table, :lexicographic, column ) do
|
|
Enum.sort_by( table, &elem( &1, column ) )
|
|
end
|
|
defp sort( table, :numeric, column ) do
|
|
Enum.sort_by( table, &elem( &1, column ) |> String.to_integer )
|
|
end
|
|
|
|
def task do
|
|
table = [ { "123", "456", "0789" },
|
|
{ "456", "0789", "123" },
|
|
{ "0789", "123", "456" } ]
|
|
IO.write "sort defaults "; IO.inspect sort( table )
|
|
IO.write " & reverse "; IO.inspect sort( table, reverse: true )
|
|
IO.write "sort column 2 "; IO.inspect sort( table, column: 2)
|
|
IO.write " & reverse "; IO.inspect sort( table, column: 2, reverse: true)
|
|
IO.write "sort numeric "; IO.inspect sort( table, ordering: :numeric)
|
|
IO.write " & reverse "; IO.inspect sort( table, ordering: :numeric, reverse: true)
|
|
end
|
|
end
|
|
|
|
Optional_parameters.task
|