Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 从阵列中删除类似对象_Ruby_Arrays - Fatal编程技术网

Ruby 从阵列中删除类似对象

Ruby 从阵列中删除类似对象,ruby,arrays,Ruby,Arrays,我有一个哈希数组: [{ item_id: 1, relationship_1: 1, relationship_2: 1, value: 'go' }, { item_id: 2, relationship_1: 2, relationship_2: 2, value: 'stop' }, { item_id: 3, relationship_1: 2, relationship_2: 1, value: 'stop' }, #remove { item_id: 4, relations

我有一个哈希数组:

[{ item_id: 1, relationship_1: 1, relationship_2: 1, value: 'go' },
 { item_id: 2, relationship_1: 2, relationship_2: 2, value: 'stop' },
 { item_id: 3, relationship_1: 2, relationship_2: 1, value: 'stop' }, #remove
 { item_id: 4, relationship_1: 3, relationship_2: 1, value: 'go' },
 { item_id: 5, relationship_1: 1, relationship_2: 2, value: 'go' }] #remove
我想删除注释的行。需要删除所有具有共同
关系_1
值的行。我能想到的唯一办法是:

items.each do |i|
  items.each do |k|
    if i.item_id != k.item_id and i.relationship_1 == k.relationship_1 and i.value == k.value
      items.remove(k)
    end
  end
end

这不符合预期。什么是最“红宝石”的方式来删除那些有问题的项目?

按{item |[item.relationship|u 1,item.value]}.values.map(&:first)
分组

更新

哎呀,这是一个杂凑:


group_by{| item |[item[:relationship_1],item[:value]}.values.map(&:first)

groupby{item | item.values_at(:relationship_1,:value)}.values.map(&:first)

不幸的是,在Ruby core中不可用。使用
require'activesupport'
将其拉入

items.uniq_by {|h| [h[:replationship_1], h[:value]] }
编辑:正如下面@mu所指出的,Ruby 1.9也可以工作:

items.uniq{|h| [h[:replationship_1], h[:value]] }
也许函数会有帮助。我发现在本文中提到了它,如果我没有错的话,它是最新RubyonRails的一部分

a.uniq_by {|t| [t.replationship_1, t.value]}

你如何定义“相似”?也请阅读。它们是不一样的。在本例中,我的意思是拥有一组相等的特定值,在标题中没有更好的表达方式。幸运的是,我使用的是Rails 3。如果它不需要的话,我不想要额外的要求。鉴于这些对象是ActiveResource对象,这将非常有效。非常感谢。他(我认为)实际上相当聪明,值得一看。胡说八道。1.9可以占用一个块,
Array 35; uniq
当然是在核心中。@muistooshort我想是的,但是当我查看文档时,我很惊讶,方法的签名没有说明它占用一个块,所以我甚至懒得看示例。(谢天谢地,此文档问题已在中解决。)@muistooshort良好呼叫。我不知道。为什么
item.relationship\u 1
在我的ruby 1.9.2安装中不起作用?我必须使
项[:relationship\u 1]
起作用。