如何按大小排序字符串列表,然后按字母顺序排序

时间:2017-04-16 23:36:09

标签: sorting elixir

我正在尝试对字符串列表进行排序,首先按大小按字母顺序排序。在我开始之前,这就是我所拥有的:

Enum.sort( &(byte_size(&1) > byte_size(&2)) )

我想要创造的东西是这样的:

Enum.sort( fn(a, b) -> byte_size(a) > byte_size(b) && String.compare(a, b) > 0 end)

但是,String模块没有办法测试一个字符串是否大于另一个字符串。有String.equivalent?但是返回字符串是否相等

1 个答案:

答案 0 :(得分:1)

我从你的例子中推测,你想按顺序排序......这可能是最简洁的方法:

iex(10)> ~w(hello is it what you want) |> Enum.sort(fn
...(10)>   s1, s2 when byte_size(s1) == byte_size(s2) -> s1 > s2
...(10)>   s1, s2 -> byte_size(s1) > byte_size(s2)
...(10)> end)

如果您处理Unicode,这可能不会给您带来结果。所以你这可能是一个更好的方法。

iex(11)> ~w(hello is it what you want) |> Enum.sort(fn s1, s2 ->
...(11)>   len1 = String.length(s1)
...(11)>   len2 = String.length(s2)
...(11)>   if len1 == len2, do: s1 > s2, else: len1 > len2
...(11)> end)
["hello", "what", "want", "you", "it", "is"]
iex(12)>