Ruby 在数组内的字符串上使用 .chars

Ruby using .chars on strings inside of an array

我想将给定的句子转换成一个数组数组,其中每个嵌套数组由每个单词的字母组成,这样 例如,“我是一只狗”变为 [[“I”]、[“a”、“m”]、[“a”]、[“d”、“o”、“g”]]。

我可以使用 .split(" ") 将句子拆分为单个单词,也可以使用 .chars 将单个单词拆分为字母,但我无法将两者结合起来。当我先拆分然后迭代时:

sentence.split(" ")
sentence.each { |word| word.chars }

...它只是 returns 单词数组,没有做第二部分。我已经尝试了此代码的几种不同变体(使用 .each_with_index,或说“word = word.chars”等),但就是无法让它执行我想要的操作。执行此操作的最佳方法是什么?

你应该使用 Enumerable#map。

sentence.split(" ").map { |word| word.chars }

您可以使用 String#scan 来避免匹配标点符号:

 "Hey, diddle, didle, the cat and the fiddle.".scan(/[a-z]+/i).map(&:chars)
    #=> [["H", "e", "y"], ["d", "i", "d", "d", "l", "e"], ["d", "i", "d", "l", "e"],
    #    ["t", "h", "e"], ["c", "a", "t"], ["a", "n", "d"], ["t", "h", "e"],
    #    ["f", "i", "d", "d", "l", "e"]]