Chcesz przetasować ciąg. To jest mój kod: co jest nie tak? Dzięki.Nowość w Ruby - jak przetasować ciąg?
>> def string_shuffle(s)
>> s.split('').shuffle(s.length()).join
>> return s
>> end
Chcesz przetasować ciąg. To jest mój kod: co jest nie tak? Dzięki.Nowość w Ruby - jak przetasować ciąg?
>> def string_shuffle(s)
>> s.split('').shuffle(s.length()).join
>> return s
>> end
Jeśli poprawnie rozumiem, chcesz to:
def string_shuffle(s)
s.split("").shuffle.join
end
string_shuffle("The Ruby language")
=> "ea gu bgTayehRlnu"
shuffle nie przyjmuje (i nie potrzebuje) argumentów. Zastosowanie:
s.split(//).shuffle.to_s
return s
jest zarówno niepotrzebne i błędne. Nie jest potrzebna, ponieważ Ruby zwraca to, co jest wykonywane jako ostatnie i niepoprawne, ponieważ nie zmieniasz s, tworzysz nowy ciąg.
Co więcej, można po prostu dodać metodę shuffle
bezpośrednio do String, jeśli okaże się przydatna, ale uważaj na monkeypatching za dużo.
class String
def shuffle
self.split('').shuffle.join
end
end
możesz umieścić to w module, a następnie zastosować moduł do łańcucha, który chcesz wpłynąć, w ten sposób nie wpłynie to na inne ciągi w aplikacji i spowodować niepożądane efekty . –
@Joseph, jak uzyskać moduł wpływający na określoną instancję łańcucha? Przykład lub link będzie świetny. Również Josh może ci się przydać [pytanie o 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 sprawdź przedłużenie. małpa łata zmienną, a nie klasę. –
spróbować tej
s.split('').shuffle.join
To jest szybciej. 'hello'.chars.shuffle.join
Sprawdź się:
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
to zrobi:
s.chars.shuffle.join
Przykład:
s = "Hello, World!"
puts s.chars.shuffle.join
wyjściowa:
olH!l rWdel,o
Jeśli potrzebujesz dużo tasowania, warto użyć opcji 'shuffle!' Zamiast 'shuffle'. Jest nieco szybszy. – defhlt
Możesz użyć 'chars' zamiast' split ("") ' –