用于具有空值的排列的Ruby方法/算法

时间:2018-02-03 22:03:14

标签: ruby-on-rails ruby algorithm

我有3个列表:标题,副标题和image_urls。

每个列表都是一个数组,每个列表可能包含0个或更多项。

我想以这种格式创建每种组合的排列:

[
  {headline: X1, subheadline: Y1, image_url: Z1}
  {headline: X1, subheadline: Y2, image_url: Z1}
  {headline: X1, subheadline: Y3, image_url: Z1}
  {headline: X1, subheadline: Y1, image_url: Z2} 
  ...
]

唯一的问题是,对于任何缺少的项目,我希望它是一个空字符串''

我第一次做的“愚蠢”解决方案就是......

headlines.each do |headline|
  subheadlines.each do |subheadline|
    image_urls.each do |url|
      {headline: headline, subheadline: subheadline, image_url: url}
    end
  end
end

但唯一的问题是,如果其中一个内部数组为空,请说subheadline,而不是追加空白并继续迭代,它将停在那里,并且不会处理所有排列。

哪种方法或方法可以帮助我?

谢谢!

2 个答案:

答案 0 :(得分:1)

做一点功能:

def maybe_add_empty_string_to_arr(arr)
  if arr == []
    [""]
  else
    arr
  end
end

然后用:

调用你的循环
maybe_add_empty_string_to_arr(headlines).each do |headline|
  maybe_add_empty_string_to_arr(subheadlines).each do |subheadline|
  ...

答案 1 :(得分:1)

开始之前你可以

headlines << '' if headlines.empty?
subheadlines << '' if subheadlines.empty?
image_urls << '' if image_urls.empty?