【发布时间】:2021-11-10 02:42:11
【问题描述】:
我有一个结构数组,我需要根据属性:num 保持它们的唯一性。该数组将附加新的结构对象。如果新的 struct 对象有重复的:num 属性值,我想删除包含重复的:num 的旧元素并用新元素替换它。
这就是我的意思。让我们设置它:
Gen = Struct.new(:num, :val)
arr = []
arr << Gen.new(11, "foo1")
arr << Gen.new(12, "foo2")
# [#<struct num=11, val="foo1">, #<struct num=12, val="foo2">]
然后我用新的结构喂它。让我们构建它们:
s1 = Gen.new(12, "foo10")
s2 = Gen.new(13, "foo3")
- 如果我使用
arr << s1,它只会将s1附加到arr中。 - 如果我在执行上述操作后执行
arr.uniq {|el| el.number},有时会删除“foo10”,但我希望始终保留最新的结构。
当s1 附加到arr 时,它需要替换旧的#<struct num=12, val="foo2"> 结构,因为s1 是最新的提要。由于arr 已经包含:num 12,我们需要用新结构替换它。由于s2 包含一个唯一的:num,它应该能够被附加没有问题(即使s2 包含重复的:val,也应该没关系,我只关心保持:num 唯一)。
最后,我需要arr 看起来像:
[#<struct num=11, val="foo1">, #<struct num=12, val="foo10">, #<struct num=13, val="foo3">]
数组的顺序无关紧要。
我查看了Add element to an array if it's not there already、Ruby condition for inserting unique items into an array、Remove duplicate elements from array in Ruby 和其他一些帖子。他们都主要处理简单的数组,而不是结构数组。
我怎样才能做到这一点?
【问题讨论】:
-
好收获!已编辑:)
-
这里有
Array的要求吗?您可以实现自己的集体类并在内部使用核心枚举。我个人推荐Hash。
标签: arrays ruby struct append unique