我从一个空数组和键、值的哈希开始。
我想遍历哈希并将其与空数组进行比较。如果数组中不存在每个 k,v 对的值,我想创建一个具有该值的对象,然后访问对象方法以将键附加到对象内的数组。
这是我的代码
class Test
def initialize(name)
@name = name
@values = []
end
attr_accessor :name
def values=(value)
@values << value
end
def add(value)
@values.push(value)
end
end
l = []
n = {'server_1': 'cluster_x', 'server_2': 'cluster_y', 'server_3': 'cluster_z', 'server_4': 'cluster_x', 'server_5': 'cluster_y'}
n.each do |key, value|
l.any? do |a|
if a.name == value
a.add(key)
else
t = Test.new(value)
t.add(key)
l << t
end
end
end
p l
我希望看到这个:
[
#<Test:0x007ff8d10cd3a8 @name=:cluster_x, @values=["server_1, server_4"]>,
#<Test:0x007ff8d10cd2e0 @name=:cluster_y, @values=["server_2, server_5"]>,
#<Test:0x007ff8d10cd1f0 @name=:cluster_z, @values=["server_3"]>
]
相反,我只得到一个空数组。
我认为条件 if a.name == value
没有被满足,然后 add 方法没有被调用。
最佳答案
@Cyzanfar 给了我寻找什么的线索,我在这里找到了答案
https://stackoverflow.com/a/34904864/5006720
n.each do |key, value|
found = l.detect {|e| e.name == value}
if found
found.add(key)
else
t = Test.new(value)
t.add(key)
l << t
end
end
关于arrays - 遍历对象数组。如果找到正确的方法,则访问对象方法。否则在数组中创建一个新对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46992538/