Новое для Ruby - как мне перетасовать строку?

Хотите перетасовать строку. Это мой код: что в этом плохого? Спасибо.

>> def string_shuffle(s)
>>   s.split('').shuffle(s.length()).join
>>   return s
>> end

Ответ 1

Если вы правильно поняли, вы хотите:

def string_shuffle(s)
  s.split("").shuffle.join
end

string_shuffle("The Ruby language")
=> "ea gu bgTayehRlnu"

Ответ 2

return s не является необходимым и неправильным. Не требуется, потому что Ruby возвращает все, что выполняется последним и неправильным, потому что вы не меняете s, вы создаете новую строку.

Кроме того, вы можете просто добавить метод shuffle непосредственно в String, если вы сочтете это полезным, но остерегайтесь monkeypatching too much.

class String

  def shuffle
    self.split('').shuffle.join
  end
end

Ответ 3

shuffle не принимает (и не требует) аргументов. Использование:

 s.split(//).shuffle.to_s

Ответ 4

Это быстрее. '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

Ответ 5

попробуйте это

s.split('').shuffle.join