如何在复杂对象之间重新组织数据

时间:2018-07-16 04:48:07

标签: ruby-on-rails arrays hash

我有一个特定的排序案例,我正在尝试完成。我的模型对象ItemName具有类型categories的属性json。看起来像这样:

@item1.categories = {"Major Category A"=>{"Sub Category 1"=>10}}
@item2.categories = {"Major Category A"=>{"Sub Category 1"=>7},"Major Category B"=>1}
@item3.categories = {"Major Category A"=>{"Sub Category 1"=>8,"Sub Category 2"=>2},"Major Category B"=>3}

类别存储类别信息,其中整数值指示项目应在该主要和/或子类别中的顺序。我想完全重新排序数据:而不是按项目,而是按类别查看。换句话说,以上数据应转换为以下数据:

@category_hash = {
  "Major Category A" => {
     "Sub Category 1" => {"ordered_list"=>[@item2.id, @item3.id, @item1.id]},
     "Sub Category 2" => {"ordered_list"=>[@item3.id]}
  },
  "Major Category B" => {"ordered_list"=>[@item2.id,@item3.id]}
}

我意识到我应该遍历@all_items,但说实话,要使项目的序数性质正常工作是很困难的。例如,在上述情况下,如果我依次浏览这3个项目,则在第一个项目之后,@category_hash会像这样:

@category_hash = {
  "Major Category A" => {
     "Sub Category 1" => {"ordered_list"=>[@item1.id]}
  }
} 

然后针对@item2,我不能只是将其添加到适当的ordered_list的{​​{1}}的末尾,而是知道将其添加到前面,因为它的值为7(在10前面)。随着事情变得越来越复杂,我不确定如何以任何一种效率继续保存订单。

感谢您的帮助!

0 个答案:

没有答案