0

我有一个像这样的数组:

[
  #<ArtLookup ARL_ART_ID: 1248525, ARL_SEARCH_NUMBER: "4502696", ARL_KIND: 3, ARL_BRA_ID: 569, ARL_DISPLAY_NR: "4502696", ARL_DISPLAY: nil, ARL_BLOCK: 1, ARL_SORT: 1>, 
  #<ArtLookup ARL_ART_ID: 1248525, ARL_SEARCH_NUMBER: "5009285", ARL_KIND: 3, ARL_BRA_ID: 525, ARL_DISPLAY_NR: "5009285", ARL_DISPLAY: nil, ARL_BLOCK: 1, ARL_SORT: 1>,
  #<ArtLookup ARL_ART_ID: 1248525, ARL_SEARCH_NUMBER: "5016786", ARL_KIND: 3, ARL_BRA_ID: 525, ARL_DISPLAY_NR: "5016786", ARL_DISPLAY: nil, ARL_BLOCK: 2, ARL_SORT: 1>,
  ...
]

如何从这个哈希数组中删除重复值?

arr.uniq没有帮助我。

我需要按ARL_DISPLAY_NR 字段删除重复项。我怎样才能做到这一点?

4

2 回答 2

0

这不是哈希的用途,您最终可能会遇到O(n)复杂的情况来完成它。要求这样做可能表明您的模型中存在设计问题。

也就是说,您可以使用以下内容:

hash = {key1: 'val1', key2: 'val2', key3: 'val3', repkey: 'val1'}
uniquevalues = {}
hash.each do |key, value|
  uniquevalues[value] = key
end

获得独特的价值。

{"val1"=>:repkey, "val2"=>:key2, "val3"=>:key3}

于 2013-03-23T17:02:09.527 回答
0

假设您可以从这样的实例中检索ARL_DISPLAY_NR字段:artArtLookup

art[:ARL_DISPLAY_NR]

然后您可以通过以下方式根据ARL_DISPLAY_NR字段删除重复项:

hash_array = [ artLookup_foo, artLookup_bar, ... ]

# this will keep the last one in a group of duplicates
Hash[ hash_array.map{|h| [h[:ARL_DISPLAY_NR], h]} ].values

# or keep the first one
Hash[ hash_array.reverse.map{|h| [h[:ARL_DISPLAY_NR], h]} ].values

但是,它不能保证保持前一个数组中的原始顺序。

于 2013-03-23T17:15:24.283 回答