我在Ruby中有这个功能
def translate word
vowels=["a","e","I","O","U"]
i=1.to_i
sentense=word.split(" ").to_a
puts sentense if sentense.length >=1
sentense.split("")
puts sentense
end
我有这句话"这是一个测试短语"首先,我想创建一个看起来像这样的数组:
["this","is","a", "test", "phrase"]
然后我想创建另一个数组看起来像:
[["t","h","i","s"],["i","s"],["a"],["t","e","s","t"],["p","h","r","a","s","e"]
。
我试过
sentense=word.split(" ").to_a
new_array=sentense.split("").to_a
但它没有工作
答案 0 :(得分:6)
您可以使用String#split
,Enumerable#map
和String#chars
:
p "this is a test phrase".split.map(&:chars)
# => [["t", "h", "i", "s"], ["i", "s"], ["a"], ["t", "e", "s", "t"], ["p", "h", "r", "a", "s", "e"]]
string.split(' ')
可以写成string.split
,因此您可以省略在括号中传递空格。
这也为你提供了一个数组,没有必要使用to_a
,你将拥有像["this", "is", "a", "test", "phrase"]
这样的数组,所以你可以使用map来获取一个新的数组,并为每个内部的元素使用.split('')
或.chars
来填充字符数组。
答案 1 :(得分:1)
def chop_up(str)
str.strip.each_char.with_object([[]]) { |c,a| c == ' ' ? (a << []) : a.last << c }
end
chop_up "fee fi fo fum"
#=> [["f", "e", "e"], ["f", "i"], ["f", "o"], ["f", "u", "m"]]
chop_up " fee fi fo fum "
#=> [["f", "e", "e"], ["f", "i"], ["f", "o"], ["f", "u", "m"]]
chop_up "feefifofum "
#=> [["f", "e", "e", "f", "i", "f", "o", "f", "u", "m"]]
chop_up ""
#=> [[]]