arrays - 遍历对象数组。如果找到正确的方法,则访问对象方法。否则在数组中创建一个新对象

标签 arrays ruby

我从一个空数组和键、值的哈希开始。

我想遍历哈希并将其与空数组进行比较。如果数组中不存在每个 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/

相关文章:

c - 如何将数组的元素数量传递给函数

ruby-on-rails - 想学习如何编写与 rails 集成的 gem,最好学习的 gem 是什么?

javascript - 按多个匹配值过滤数组

javascript - 按人工顺序对 JavaScript 数组进行排序

JavaScript:每次 3 秒后显示一个数组项

ruby-on-rails - Ruby of Rails 无法在没有前导字母字符的情况下呈现部分(仅使用数字或前导数字)

ruby - 保护 Sinatra 应用程序的最佳实践是什么?

php - 使用 PHP 中的 json_encode 时,JQuery $.each 循环会重新排序我的数组

php - 将 session 数据存储在文件与数据库中的优缺点是什么?

ruby-on-rails - 保持干燥,但由于不同原因想要重复