我正在尝试一个句子,并反转每个单词中字母的位置。
以下是我的代码不起作用:
def test(sentence)
array = []
array << sentence.split
array.collect {|word| word.reverse}
end
我的问题是:
array << sentence.split
它说它划分每个单词,但是当我使用插值时,它会反转整个句子。下面是一个类似的代码:
def test2
dog = ["Scout", "kipper"]
dog.collect {|name| name.reverse}
end
但它不接受一个句子,它已经定义了数组。
答案 0 :(得分:3)
我想你要拆分,然后将数组的每个元素映射到其反转版本,然后将数组重新加入字符串:
def test(sentence)
sentence.split.map {|word| word.reverse}.join(" ")
end
使用symbol-to-proc更简洁(在评论中记下@MarkThomas)
sentence.split.map(&:reverse).join " "
答案 1 :(得分:0)
您可以使用正则表达式,避免将句子分解为单词,反转单词并重新加入。
"vieille mère Hubbard".gsub(/\w\p{L}+\w/) { |s| s.reverse }
#=> "ellieiv erèm drabbuH"
答案 2 :(得分:0)
def reverse(str)
str.split.map { |s| s.length < 5 ? s : s.reverse }.join(' ')
end
puts reverse ("this is a catalogy")
这应该使长度不超过5的每个单词颠倒