繁体   English   中英

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

[英]ruby split string into array then split array elements into words

我想对给定的字符串执行更深的数组方法。 假设我有str = "hello world"

我可以使用str.split(" ")进行拆分。 但是我的预期目标是将"hello"转换为["h", "e", "l", "l", "o"]"world"转换为["w", "o", "r", "l", "d"]所以我可以选择数组方法(例如交换第一个和最后一个字母["o", "e", "l", "l", "h"] ,然后返回它返回到["oellh", "dorlw"] ,最后将它们重新组合为"oellh dorlw"

那只是一个示例方法。 我希望应用几种不同的数组方法,但是只有在将字符串拆分为单词数组,然后进一步拆分为元素数组的情况下,它才有效( str.chars不是我想要的)。 我尝试了str.split(" ").each {|arr| arr.split("")} str.split(" ").each {|arr| arr.split("")}但不起作用。 将字符串拆分为数组,然后将单词数组拆分为元素数组,应用方法,然后将它们重新组合为字符串的最佳方法是什么?

"hello world".split.map { |word| word[-1] + word[1..-2] + word[0] }.join(' ')
=> "oellh dorlw"

这是一件非常简单的事情:

'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类文档。 它可以帮助您了解可用的方法,因此您可以快速搜索这些内容。

您几乎有自己的答案,只是略有偏离:

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"

要产生["oellh", "dorlw"]您可以编写

str.split(" ").map{|arr| arr.reverse}

产生像

[["H", "e", "l", "l", "o"], ["w", "o", "r", "l", "d"]]

你可以做

str.split(" ").map{|arr| arr.split("")}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM