ruby-on-rails - 确定数组大小是否从以前的值更改 - 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
有没有更有效的方法来写这个?像一个班轮的东西?任何帮助,将不胜感激。
解决方案
如果大小更改,则返回 true:
previous_values[0][:categories].size != new_values[0][:categories].size
推荐阅读
- python - 如何在 matplotlib/seaborn 中计算带有间隔的绘图列值?
- ansible - 替换 Ansible 中 dict 列表中的值
- typescript - Redux:通过 Record 的键猜测 Payload 类型
- javascript - 类和方法的单一职责?
- java - Dataproc Spark 3.1 中的 Sqoop 和 Avro 依赖问题
- javascript - 如何在加载新项目到列表时避免滚动跳转?
- c++ - 如何使该类的每个实例的类的数据成员唯一
- javascript - react函数组件中如何实现全局变量
- c - 带 C 的多运算符计算器
- three.js - THREE.Mesh 的法线与原始模型不同