gpt4 book ai didi

arrays - 基于ruby中的多个属性从对象数组中删除重复项

转载 作者:太空宇宙 更新时间:2023-11-03 17:14:30 33 4
gpt4 key购买 nike

我有一个对象数组,其中可能包含具有相同属性值的对象。我正在尝试根据多个属性(不仅仅是一个属性值)删除重复项

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)}

如果它们是散列

最佳答案

你可以试试:

uniq_fonts = fonts.uniq { |f| [ f.name, f.color ] }

您可以定义自己的 values_at 方法,例如:

class Font
attr_accessor :color, :name, :type

def values_at *args
args.map { |method_name| self.public_send method_name }
end
end

然后做喜欢:

fonts.uniq { |f| f.values_at(:name, :color)}

关于arrays - 基于ruby中的多个属性从对象数组中删除重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38880400/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com