【发布时间】:2011-10-23 20:50:05
【问题描述】:
想要随机播放一个字符串。 这是我的代码: 它有什么问题? 谢谢。
>> 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
【问题讨论】:
标签: ruby
如果你理解正确,你想要这个:
def string_shuffle(s)
s.split("").shuffle.join
end
string_shuffle("The Ruby language")
=> "ea gu bgTayehRlnu"
【讨论】:
shuffle! 而不是shuffle 是有意义的。它有点快。
chars代替split("")
return s 既不需要也错误。不需要,因为 Ruby 返回最后执行的任何内容,并且错误因为您没有更改 s,而是创建了一个新字符串。
此外,如果你觉得 shuffle 方法有用,你可以直接将它添加到 String 中,但要注意猴子补丁太多。
class String
def shuffle
self.split('').shuffle.join
end
end
【讨论】:
这样更快。
'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
【讨论】:
shuffle 不接受(并且需要)参数。使用:
s.split(//).shuffle.to_s
【讨论】:
试试这个
s.split('').shuffle.join
【讨论】:
这样就可以了:
s.chars.shuffle.join
例子:
s = "Hello, World!"
puts s.chars.shuffle.join
输出:
olH!l rWdel,o
【讨论】: