首页 > 解决方案 > 确定数组大小是否从以前的值更改 - Ruby

问题描述

代码如下

 previous_values = [
  {
    : id=>1,
    : name=>"fruits",
    : categories=>[
      {
        : id=>1,
        : name=>"orange",
        : qty=>7
      },
      {
        : id=>2,
        : name=>"apple",
        : qty=>7
      }
    ]
  },
  {
    : id=>2,
    : name=>"vegetables",
    : categories=>[
      {
        : id=>1,
        : name=>"spinach",
        : qty=>7
      },
      {
        : id=>2,
        : name=>"carrot",
        : qty=>7
      }
    ]
  }
]

new_values = [
      {
        : id=>1,
        : name=>"fruits",
        : categories=>[
          {
            : id=>1,
            : name=>"orange",
            : qty=>5
          },
          {
            : id=>2,
            : name=>"apple",
            : qty=>7
          },
          {
            : id=>3,
            : name=>"guava",
            : qty=>7
          }
        ]
      },
  {
    : id=>2,
    : name=>"vegetables",
    : categories=>[
      {
        : id=>1,
        : name=>"spinach",
        : qty=>7
      },
      {
        : id=>2,
        : name=>"carrot",
        : qty=>7
      }
    ]
  }
    ]

我需要确定新值中类别的大小是否发生了变化。

在这种情况下,水果中水果类别的大小发生了变化,而蔬菜类别的大小没有变化。所以一般来说,我需要将 size_changed 设置为 true,因为其中一个类别大小已更改

我已经实现了如下。

    size_changed = false
    previous_values.each do |p|

      current_val = new_values.to_a.find { |nv| nv.id == p.id }
      if current_val.categories.map(&:id).sort != p.categories.map(&:id).sort
        size_changed = true
      end
    end
    size_changed

有没有更有效的方法来写这个?像一个班轮的东西?任何帮助,将不胜感激。

标签: ruby-on-railsruby-on-rails-5

解决方案


如果大小更改,则返回 true:

previous_values[0][:categories].size != new_values[0][:categories].size

推荐阅读