ruby将字符串拆分为数组,然后将数组元素拆分为单词

时间:2016-07-05 17:32:21

标签: arrays ruby

我想对给定的字符串执行更深层次的数组方法。假设我有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,但它不起作用。将字符串拆分为数组,将该字符数组拆分为元素数组,应用方法并将它们连接回字符串的最佳方法是什么?

4 个答案:

答案 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("")}