0

我想要数组中的所有组合,也需要大写字母和所有长度(两个组合,三个组合等等......)

我的脚本看起来像:

我的阵列

a = ["hello", "my", "world"]

这将大写单词添加到我们的数组中,不想重复单词

b = a.map(&:capitalize)

这结合了大写的单词

c = [[a, b]]

这应该打印我的组合

puts c.first.product(*c[1..-1]).map(&:join)

结果是

hellomyworld

HelloMyWorld

这不是我想要的。我想

hellomyworld
Hellomyworld
HelloMyworld
HelloMyWorld
helloMyworld
helloMyWorld
hellomyWorld
HellomyWorld

等等。(不知道我是否错过了组合)有人有胶水吗?

4

2 回答 2

2

这将满足您的要求:

a.map { |word| [word, word.capitalize] }
 .reduce(&:product)
 .map { |sentence| sentence.flatten.join }

首先,我们将单词数组映射到单词对数组:原始版本和大写版本。然后我们通过将先前收集的句子与下一个词对相乘来将这些对简化为一个句子数组:这会产生不均匀的数组,例如 [["hello", "my"], "world"] 但这不是问题因为在下一步中,我们将每个句子展平并连接成一个字符串。我希望这有帮助。


编辑:我刚刚意识到您的解决方案几乎也可以正常工作:c = [[a, b]]您应该成功c = a.zip bzip将各自的元素相互配对,同时[]将给定的数组放入外部数组。

于 2013-06-17T11:47:02.983 回答
1
["hello", "my", "world"]
.map{|w| [w, w.capitalize]}
.tap{|first, *rest| break first.product(*rest).map(&:join)}
于 2013-06-17T11:49:18.483 回答