[英]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.