Vraag Nieuw bij Ruby - hoe kan ik een string shufflen?


Wil je een string in willekeurige volgorde zetten. Dit is mijn code: wat is er aan de hand? Bedankt.

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

16
2017-08-10 07:58


oorsprong


antwoorden:


Als u het goed begrijpt, wilt u dit:

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

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

22
2017-08-10 08:06



return s is zowel niet nodig als fout. Niet nodig omdat Ruby teruggeeft wat er als laatste en verkeerd is uitgevoerd omdat je niet verandert, je maakt een nieuwe string.

Bovendien kunt u gewoon de shuffle methode rechtstreeks aan String als u het nuttig vindt, maar pas op voor een te veel monkeypatching.

class String

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

8
2017-08-10 08:09



Dit gaat sneller. 'hello'.chars.shuffle.join

Test jezelf:

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

3
2017-09-23 23:14



shuffle accepteert geen (en behoeft) argumenten. Gebruik:

 s.split(//).shuffle.to_s

2
2017-08-10 08:06



probeer dit

s.split('').shuffle.join

1
2017-08-10 08:39



Dit zal voldoen:

s.chars.shuffle.join

Voorbeeld:

s = "Hello, World!"
puts s.chars.shuffle.join

Output:

olH!l rWdel,o

1
2018-03-01 16:24