取一个字符串,反转每个单词中的字母,同时将单词保留在其原始位置
Taking a string, reversing the letter in each word while leaving the word in its original position
我正在尝试取一个句子,并将每个单词中的字母位置颠倒。
下面是我的代码不起作用:
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
但是它不接受一个句子,它已经定义了数组。
我想你想拆分,然后将数组的每个元素映射到它的反向版本,然后将数组重新连接成一个字符串:
def test(sentence)
sentence.split.map {|word| word.reverse}.join(" ")
end
使用 symbol-to-proc 更简洁(在评论中归功于@MarkThomas)
sentence.split.map(&:reverse).join " "
与将句子分解成单词、反转每个单词然后重新连接它们的方法不同,使用 Array#gsub 和正则表达式会保留非单词字符(例如下例中的逗号)和多个空格。
"vieille, mère Hubbard".gsub(/\b\p{L}+\b/, &:reverse)
#=> "ellieiv, erèm drabbuH"
def reverse(str)
str.split.map { |s| s.length < 5 ? s : s.reverse }.join(' ')
end
puts reverse ("this is a catalogy")
这应该反转每个长度不超过 5 的单词
我正在尝试取一个句子,并将每个单词中的字母位置颠倒。
下面是我的代码不起作用:
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
但是它不接受一个句子,它已经定义了数组。
我想你想拆分,然后将数组的每个元素映射到它的反向版本,然后将数组重新连接成一个字符串:
def test(sentence)
sentence.split.map {|word| word.reverse}.join(" ")
end
使用 symbol-to-proc 更简洁(在评论中归功于@MarkThomas)
sentence.split.map(&:reverse).join " "
与将句子分解成单词、反转每个单词然后重新连接它们的方法不同,使用 Array#gsub 和正则表达式会保留非单词字符(例如下例中的逗号)和多个空格。
"vieille, mère Hubbard".gsub(/\b\p{L}+\b/, &:reverse)
#=> "ellieiv, erèm drabbuH"
def reverse(str)
str.split.map { |s| s.length < 5 ? s : s.reverse }.join(' ')
end
puts reverse ("this is a catalogy")
这应该反转每个长度不超过 5 的单词