我正在尝试对字符串列表进行排序,首先按大小按字母顺序排序。在我开始之前,这就是我所拥有的:
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?
但是返回字符串是否相等
答案 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)>