Ruby方法,它接受一个字符串并返回一个重复数组,每个重复字符串中的下一个字母大写(像波浪)



我想创建一个函数,将字符串转换为相同的字符串数组,除了每个字符串将字符串中的下一个字母大写,而其余字母则小写。我将给它一个字符串并希望它以一个数组的形式返回这个字符串其中只有一个大写字母,像这样:

wave("hello") => ["Hello", "hEllo", "heLlo", "helLo", "hellO"]
wave("two words") => ["Two words", "tWo words", "twO words", "two Words", "two wOrds", "two
woRds", "two worDs", "two wordS"]

我想到了这个,但是它真的很大,需要很长时间来运行。我如何压缩它或编写一些新代码,使其运行得更好?

def wave(str)
ary = []
chars_array = str.chars
total_chars = chars_array.count
i = 0
until i == total_chars
if chars_array[i].match(/w/i)
chars_array_temp = str.chars
chars_array_temp[i] = chars_array[i].upcase
fixed_string = chars_array_temp.join
ary << fixed_string
i = i+1
end
end
return ary
end

提前感谢!

我会这样做:

def wave(word)
words = Array.new(word.size) { word.dup }
words.map.with_index { |e, i| e[i] = e[i].upcase; e } - [word]
end
wave("hello")
#=> ["Hello", "hEllo", "heLlo", "helLo", "hellO"]
wave("two words")
#=> ["Two words", "tWo words", "twO words", "two Words", "two wOrds", "two woRds", "two worDs", "two wordS"]

最新更新