我有这样的哈希:
data = {"Blood Group"=>"A", "Next Review Date"=>"22/06/2016", "Tourniquet Time"=>"23", "BMI"=>"21"}
我在数组中有一个排序顺序:
sorting_order = [1, 0, 2, 3]
我想根据排序顺序数组重新排列哈希值,以便哈希变为:
data = {"Next Review Date"=>"22/06/2016", "Blood Group"=>"A", "Tourniquet Time"=>"23", "BMI"=>"21"}
我试过了:
sorted_hash = sorting_order.map{|x| data[x]}
它返回:
NoMethodError: undefined method `[]' for #<Enumerator: [1, 0, 2, 3]:index>
我不确定如何继续这里。这样做的方法是什么?
答案 0 :(得分:4)
这应该可以解决问题:
sorting_order.map{|x| data.to_a[x]}.to_h # We're converting hash to array in each loop, you could define a local var and use it here instead.
=> {"Next Review Date"=>"22/06/2016", "Blood Group"=>"A", "Tourniquet Time"=>"23", "BMI"=>"21"}
PS。我是@ DaveNewton评论的赞成者之一,并同意不应对哈希进行排序。
答案 1 :(得分:2)
data.to_a.values_at(*sorting_order).to_h
#=> {"Next Review Date"=>"22/06/2016", "Blood Group"=>"A",
# "Tourniquet Time"=>"23", "BMI"=>"21"}
答案 2 :(得分:1)
您是否可以将哈希键存储在包含排序顺序的数组中,而不是每次都对哈希进行排序?
像这样:sorting_order
当用户更改顺序时,您只需更新sorting_order.each { |data_key| render(data[data_key]) }
数组中的键即可。
之后,在渲染数据时,您只需调用
RedirectToAction