从Ruby中的类实例数组中提取特定成员值数组

从Ruby中的类实例数组中提取特定成员值数组,ruby,arrays,Ruby,Arrays,我发现了很多关于将整个类转换为散列以及从数组中选择的信息。我似乎无法正确地表达我的问题,让谷歌给我一个有用的回答。假设我有一个带有成员变量的类 class class_name_here attr_reader :var_name_here attr_reader :another_var_name end 然后我有一个这个类的数组 array_of_class_instances 如何提取整个数组的var_name_here值数组?例如,如果在这里的类_name_的实例1中,var

我发现了很多关于将整个类转换为散列以及从数组中选择的信息。我似乎无法正确地表达我的问题,让谷歌给我一个有用的回答。假设我有一个带有成员变量的类

class class_name_here
  attr_reader :var_name_here
  attr_reader :another_var_name
end
然后我有一个这个类的数组

array_of_class_instances
如何提取整个数组的var_name_here值数组?例如,如果在这里的类_name_的实例1中,var_name_的值是“String 1”,而在实例2中它是“Hello,world”,那么我想要的输出是[“String 1”,“Hello,world”]


谢谢

简单-使用
map

array_of_var_name_here = array_of_class_instances.map(&:var_name_here)
请注意,
&:var\u name\u here
语法只是一种简洁的方式,表示“由方法
var\u name\u here
组成的块。它相当于

array_of_var_name_here = array_of_class_instances.map { |ci| ci.var_name_here }

简单-使用
map

array_of_var_name_here = array_of_class_instances.map(&:var_name_here)
请注意,
&:var\u name\u here
语法只是表示“由方法
var\u name\u here
组成的块”的一种简洁方式。相当于

array_of_var_name_here = array_of_class_instances.map { |ci| ci.var_name_here }
使用地图方法:

array_of_class_instances.map(&:var_name_here)
如果这是ActiveRecord模型:

array_of_class_instances.pluck(:var_name_here)
使用地图方法:

array_of_class_instances.map(&:var_name_here)
如果这是ActiveRecord模型:

array_of_class_instances.pluck(:var_name_here)

通常将
initialize
方法与访问器结合使用:

class X
  attr_reader :var_name1
  attr_reader :var_name2
  def initialize(var_name1, var_name2)
    @var_name1 = var_name1
    @var_name2 = var_name2
  end
end
然后:

x = X.new(:cat, :hat)
y = X.new(:dog, :log)

array_of_class_instances = [x, y]
i = array_of_class_instances.first
i.var_name1 # => :cat 
i.var_name2 # => :hat 
x = X.new
x.var_name1 = :cat
x.var_name2 = :hat
y = X.new
y.var_name1 = :dog
y.var_name2 = :log

array_of_class_instances = [x, y]
i = array_of_class_instances.first
i.var_name1 # => :cat 
i.var_name2 # => :hat 
如果您愿意,可以将其放入数组中。或者

class X
  attr_reader :var_name1
  attr_reader :var_name2
end
然后:

x = X.new(:cat, :hat)
y = X.new(:dog, :log)

array_of_class_instances = [x, y]
i = array_of_class_instances.first
i.var_name1 # => :cat 
i.var_name2 # => :hat 
x = X.new
x.var_name1 = :cat
x.var_name2 = :hat
y = X.new
y.var_name1 = :dog
y.var_name2 = :log

array_of_class_instances = [x, y]
i = array_of_class_instances.first
i.var_name1 # => :cat 
i.var_name2 # => :hat 

通常将
initialize
方法与访问器结合使用:

class X
  attr_reader :var_name1
  attr_reader :var_name2
  def initialize(var_name1, var_name2)
    @var_name1 = var_name1
    @var_name2 = var_name2
  end
end
然后:

x = X.new(:cat, :hat)
y = X.new(:dog, :log)

array_of_class_instances = [x, y]
i = array_of_class_instances.first
i.var_name1 # => :cat 
i.var_name2 # => :hat 
x = X.new
x.var_name1 = :cat
x.var_name2 = :hat
y = X.new
y.var_name1 = :dog
y.var_name2 = :log

array_of_class_instances = [x, y]
i = array_of_class_instances.first
i.var_name1 # => :cat 
i.var_name2 # => :hat 
如果您愿意,可以将其放入数组中。或者

class X
  attr_reader :var_name1
  attr_reader :var_name2
end
然后:

x = X.new(:cat, :hat)
y = X.new(:dog, :log)

array_of_class_instances = [x, y]
i = array_of_class_instances.first
i.var_name1 # => :cat 
i.var_name2 # => :hat 
x = X.new
x.var_name1 = :cat
x.var_name2 = :hat
y = X.new
y.var_name1 = :dog
y.var_name2 = :log

array_of_class_instances = [x, y]
i = array_of_class_instances.first
i.var_name1 # => :cat 
i.var_name2 # => :hat 

您的中间方法不是特定于Rails的。CoreRuby也会这么做。谢谢,map绝对是我找不到的。我会尽快接受。你的中间方法不是Rails特有的。CoreRuby也会这么做。谢谢,map绝对是我找不到的。只要它允许,我就接受。