2016-07-25 20 views
2

私は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

を使用することができ、ここでのヒントです:文字列としてランダム小文字を得るためにこれを行うには、より効率的な_lot_次のようになります。 '<< ?a - 1 +:random.uniform(26)>> '。 – Dogbert

答えて

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オプションを使用することができますs:

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

ありがとう!トリムはデフォルトの動作ではない、それは変です。 – user1184756

0

文字列を分割する場合は、次の2つの方法があります。 2番目は、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" 
関連する問題