在不创建二维数组的情况下向数组添加数组

5
我有一个数组word_array,我想把所有句子中的单词都加入到它里面。例如:
word_array = []
sentence_1 = "my first sentence"
sentence_2 = "my second sentence"

然后有:

word_array = ["my", "first", "sentence", "my", "second", "sentence"]

如果我使用split()
word_array << sentence_1.split
word_array << sentence_2.split 

I get:

word_array = [["my", "first", "sentence"], ["my", "second", "sentence"]]

如何避免在这里使用2D数组?
4个回答

6
使用 concat
word_array.concat(sentence_1.split)
word_array.concat(sentence_2.split)

它比使用 + 更有效率,因为它不会创建一个新数组。

4

一种方法是每次使用+=将元素添加到word_array的末尾:

word_array += sentence_1.split
# => ["my", "first", "sentence"]
word_array += sentence_2.split
# => ["my", "first", "sentence", "my", "second", "sentence"]

我收到一个错误信息:“将字符串隐式转换为数组无效”。 - Graham Slick

3

只需使用sentence_1.split + sentence_2.split

我认为您可能会混淆数组的+<<操作符。 +是合并数组,<<则将参数作为数组的元素添加。


1

很可能你有多个句子,而且可能以数组的形式得到。以下解决方案适用于这种情况,也适用于只有几个句子的情况。

sentence_1 = "my first sentence"
sentence_2 = "my second sentence"

ary = [sentence_1, sentence_2]
words = ary.flat_map {|s| s.split}
#=> ["my", "first", "sentence", "my", "second", "sentence"]

在这种情况下,injecteach_object可能更有效。但是你的答案可能在概念上更简单。并且符号转过程是否吸引您? - sawa
@sawa - 谢谢。我试图避免在split结果上显式调用flatten - Wand Maker
我知道。在这种情况下使用“flatten”是一个不好的主意。 - sawa

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接