【问题标题】:Every combination with all lengths of array [closed]具有所有数组长度的每个组合[关闭]
【发布时间】:2013-06-17 11:20:45
【问题描述】:

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

我的脚本如下:

我的数组

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

等等。 (不知道有没有漏掉一个组合)有人有胶水吗?

【问题讨论】:

  • by 结合大写和所有长度你的意思是hello, hellomy, ... 也应该在你的结果集中?
  • 是的,数组中的所有单词都按照给定的顺序排列,但混合所有可能的小写字母,大写;-)

标签: ruby arrays combinations


【解决方案1】:

这将满足您的要求:

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

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


编辑:我刚刚意识到您的解决方案几乎同样有效:安装 c = [[a, b]] 您应该将其设为 c = a.zip bzip 将各自的元素相互配对,而 [] 将给定的数组放入外部数组中。

【讨论】:

    【解决方案2】:
    ["hello", "my", "world"]
    .map{|w| [w, w.capitalize]}
    .tap{|first, *rest| break first.product(*rest).map(&:join)}
    

    【讨论】:

      猜你喜欢
      • 2018-01-13
      • 1970-01-01
      • 1970-01-01
      • 2020-12-18
      • 1970-01-01
      • 1970-01-01
      • 2013-12-05
      • 2020-07-15
      • 1970-01-01
      相关资源
      最近更新 更多