我想对给定的字符串执行更深层次的数组方法。假设我有str = "hello world"
我可以使用str.split(" ")
拆分它。但我的目标是将"hello"
转换为["h", "e", "l", "l", "o"]
,将"world"
转换为["w", "o", "r", "l", "d"]
,这样我就可以选择我选择的数组方法(例如交换第一个和最后一个字母{{1} },然后将其返回["o", "e", "l", "l", "h"]
,最后将它们重新组合在一起["oellh", "dorlw"]
。
这只是一个示例方法。我希望应用几种不同的数组方法,但它只适用于将字符串拆分为单词数组,并进一步拆分为元素数组("oellh dorlw"
不是我想要的)。我试过str.chars
,但它不起作用。将字符串拆分为数组,将该字符数组拆分为元素数组,应用方法并将它们连接回字符串的最佳方法是什么?
答案 0 :(得分:2)
"hello world".split.map { |word| word[-1] + word[1..-2] + word[0] }.join(' ')
=> "oellh dorlw"
答案 1 :(得分:2)
这是一件非常简单的事情:
'hello world'.split.map{ |s|
s[0], s[-1] = s[-1], s[0]
s
} # => ["oellh", "dorlw"]
.join(' ') # => "oellh dorlw"
您不需要创建单词字符的中间数组,这会浪费CPU。相反,s[0], s[-1] = s[-1], s[0]
使用并行分配来交换第一个和最后一个字符。
一旦你有了反向词的数组,那么join(' ')
将再次返回一个字符串。
您可以使用[...] * ' '
来完成同样的事情,但它并不像惯用语:
["oellh", "dorlw"] * ' ' # => "oellh dorlw"
如何解决这个问题。
如果您想将字符串转换为字符,可以使用split('')
。 chars
可用,并将执行相同的操作:
'hello world'.split.map(&:chars) # => [["h", "e", "l", "l", "o"], ["w", "o", "r", "l", "d"]]
chars
应该快一点,因为Ruby不必弄清楚传递给split
的参数。
您可以在此时折叠,转动或肢解所需的一切。
我建议阅读几次Ruby类文档。它有助于您了解可用的方法,因此您可以快速搜索这些内容。
答案 2 :(得分:2)
你几乎有自己的答案,你只是略微偏离:
str = "hello world"
=> "hello world"
str.split(" ").map { |s| s.split("") }
=> [["h", "e", "l", "l", "o"], ["w", "o", "r", "l", "d"]]
使用map
代替each
。
相反:
a = str.split(" ").map { |s| s.split("") }
=> [["h", "e", "l", "l", "o"], ["w", "o", "r", "l", "d"]]
a.map { |s| s.join }.join(" ")
=> "hello world"
答案 3 :(得分:1)
要制作["oellh", "dorlw"]
,您可以写
str.split(" ").map{|arr| arr.reverse}
生成像
这样的数组数组[["H", "e", "l", "l", "o"], ["w", "o", "r", "l", "d"]]
你可以做到
str.split(" ").map{|arr| arr.split("")}