我從一個空數組和一個鍵值的哈希開始。遍歷數組對象。然後訪問對象方法,如果找到正確的方法。否則,在數組中創建一個新的對象
我想遍歷哈希並將其與空數組進行比較。如果每個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方法沒有被調用。
''l.any永遠是假的因爲你永遠不會添加任何東西。 – Cyzanfar
可能還想看看'group_by',這裏可能會幫助你,或者可能不會幫助你:'n.group_by {| _,v | v}'或'n.keys.group_by {| key | n [key]}' –