想要洗牌的字符串。 這是我的代碼: 它有什麼不對? 謝謝。Ruby新手 - 我如何洗牌字符串?
>> def string_shuffle(s)
>> s.split('').shuffle(s.length()).join
>> return s
>> end
想要洗牌的字符串。 這是我的代碼: 它有什麼不對? 謝謝。Ruby新手 - 我如何洗牌字符串?
>> def string_shuffle(s)
>> s.split('').shuffle(s.length()).join
>> return s
>> end
如果理解正確的話,你想這樣的:既沒有必要與錯
def string_shuffle(s)
s.split("").shuffle.join
end
string_shuffle("The Ruby language")
=> "ea gu bgTayehRlnu"
shuffle不接受(和需要)參數。用途:
s.split(//).shuffle.to_s
return s
。不需要,因爲Ruby會返回最後執行的任何內容,並且因爲您沒有更改s而錯誤,因此您正在創建一個新字符串。
此外,您可以直接將shuffle
方法添加到字符串,如果您發現它有用,但要小心monkeypatching太多。
class String
def shuffle
self.split('').shuffle.join
end
end
你可以把它放在一個模塊中,然後將模塊應用到你想要影響的字符串,這種方式不會影響應用中的其他字符串並導致不需要的效果。 –
@Joseph,你如何得到一個模塊來影響特定的字符串實例?一個例子或鏈接會很好。另外,喬希,你可能會發現這個[有關monkeypatching的問題](http://stackoverflow.com/questions/394144/what-does-monkey-patching-exactly-mean-in-ruby)有用。 – Zabba
@Zabba http://www.ruby-doc.org/core/classes/Module.html檢查擴展。它猴子補丁一個變量,而不是一個類。 –
試試這個
s.split('').shuffle.join
這是更快。 'hello'.chars.shuffle.join
考考你:
require 'benchmark'
str = 'Hello' * 100
Benchmark.bm(10) do |x|
x.report('chars') { str.chars.shuffle.join }
x.report('split') { str.split('').shuffle.join }
x.report('split regex') { str.split(//).shuffle.join }
end
這樣做:
s.chars.shuffle.join
例子:
s = "Hello, World!"
puts s.chars.shuffle.join
輸出:
olH!l rWdel,o
如果你需要大量的洗牌,使用'shuffle !'而不是'shuffle'是有意義的。它有點快。 – defhlt
你可以使用'chars'而不是'split(「」)' –