随机字母返回空白

时间:2016-07-25 12:09:29

标签: string enums elixir

我是Elixir的新手并试图从函数中随机收到一封信。

我尝试定义一个在a和z之间返回一个随机字母的函数。

由于某种原因,这有时会返回一个空白字符。 为什么呢?

defp random_letter do
  "abcdefghijklmnopqrstuvwxyz"
  |> String.split("")
  |> Enum.random
end

def process do
  Enum.each(1..12, fn(number) ->
    IO.puts random_letter
  end)
end

输出:

g
m
s
v
r
o
m

x
e
j
w

2 个答案:

答案 0 :(得分:2)

String.split("abcdefghijklmnopqrstuvwxyz", "")

返回

["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", ""]

查看列表中的最后一个元素,得到答案:)

为避免这种情况,您可以使用trim选项,如下所示:

String.split("abcdefghijklmnopqrstuvwxyz", "", trim: true)

答案 1 :(得分:0)

如果要分割字符串,可以使用以下两种方法。当你有Unicode字符串时使用第二个。

iex(1)> String.codepoints("abcdefghijklmnopqrstuvwxyz")
["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p",
 "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"]

iex(2)> String.graphemes("abcdefghijklmnopqrstuvwxyz")
["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p",
 "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"]

或者您可以使用

iex(1)> <<Enum.random(?a..?z)>>
"m"