2014-03-26 44 views
1

我想將'abcdef'轉換爲'aBCdeF''AbCDEF'或小寫和大寫字符的任何其他隨機組合。我需要使用任何給定的字符串。我知道String#upcase,#swapcase,#capitalize等,但我不認爲有一個內置的方法來做我想做的事情。我想出的最好的是這樣的:如何在Ruby中隨機化字符串的大小寫?

'abcdef'.chars.map { |c| c.send [:upcase, :downcase][rand 2] }.join 

有什麼更好的點子?

回答

3

你可以嘗試這樣的事情,在這裏x是你的字符串:

x.chars.map { |c| (rand 2) == 0 ? c : c.upcase }.join 

map方法採用隨機爲每個字符生成01塊。如果0,char將按原樣返回,否則它會變爲大寫。

+0

這很好,但這隻適用於一系列字符。我需要這個來處理任何給定的字符串。 abcdef只是一個例子。 –

+0

容易修復,只是更新答案,基本上相同,仍然只是枚舉一個枚舉對象。 – 2014-03-26 09:29:56

+0

這不應該是被接受的答案,因爲它只會隨機增加......它永遠不會降低,所以像「FOO」這樣的字符串永遠不會被改變。 @sawa的答案沒有這個問題。 – thutt

3
'abcdef'.gsub(/./){|s| s.send(%i[upcase downcase].sample)} 
# => "aBCdEf" 
相關問題