【发布时间】:2016-08-10 17:54:53
【问题描述】:
我有一个对象数组,其中可能包含具有相同属性值的对象。我正在尝试基于多个属性(不仅仅是一个属性值)删除重复项
class Font
attr_accessor :color, :name, :type
end
a = <@color="blue", @name="s", @type="bold">
b = <@color="blue", @name="r", @type="italic">
c = <@color="green", @name="t", @type="bold">
d = <@color="blue", @name="s", @type="some_other_type">
fonts = [a, b, c, d]
我需要根据颜色、名称的值消除重复项(我不关心类型)
我尝试过的
uniq_fonts = fonts.uniq { |f| f.name.to_s + f.color.to_s}
有什么更简洁的方法可以达到同样的效果吗?
注意: 这些是对象而不是哈希。我知道我们可以使用:
fonts.uniq { |f| f.values_at(:name, :color)}
如果他们是哈希
【问题讨论】:
-
为什么急于选择答案?您可能会阻止其他答案,并让那些仍在准备答案的人短路。
-
a、b、c和d不是有效对象,因此读者无法在不修改代码的情况下进行测试。您需要为b、c和d添加def initialize(color, name, type); @color, @name, @type = color, name, type; end、定义a = Font("blue", "s", "bold")和类似内容。 -
我的意思是
a = Font.new("blue", "s", "bold")...