ruby 结构体数组

Jas*_*son 1 ruby struct amazon-web-services aws-sdk

我需要AWS EC2使用来提取标签值AWS ruby-sdk v2来获取有关实例的信息。标签大部分是手动设置的。

当我从以下代码中获取标签时:

ec2 = Aws::EC2::Resource.new(:region => us-east-1)
ec2.instances.limit(10).each do |instance|  
  instance.tags.each do |tag|       
    puts tag   
  end
end
Run Code Online (Sandbox Code Playgroud)

我懂了:

#<struct Aws::EC2::Types::Tag key="Owner", value="the_owner">
#<struct Aws::EC2::Types::Tag key="PurchaseOrder", value="90210">
#<struct Aws::EC2::Types::Tag key="Name", value="my_rocking_instance">
#<struct Aws::EC2::Types::Tag key="environment", value="staging">

#<struct Aws::EC2::Types::Tag key="Name", value="another_instance">
#<struct Aws::EC2::Types::Tag key="environment", value="prod">
#<struct Aws::EC2::Types::Tag key="PurchaseOrder", value="90210">
#<struct Aws::EC2::Types::Tag key="Owner", value="the_owner">
Run Code Online (Sandbox Code Playgroud)

等等。为了清楚起见,我在两个实例之间留了一个空格。我尝试了一些数组、哈希等技巧,但这似乎是一个我尚未使用过的结构数组。

如何仅提取Name标签值?

Nab*_*eel 5

像这样

ec2.instances.limit(10).each do |instance|  
  instance.tags.each do |tag|       
    puts tag.value if tag.key == 'Name'
  end
end
Run Code Online (Sandbox Code Playgroud)

或者您也可以使用类似的方法来返回实例标记值的数组(其中包含键Name)。

ec2.instances.limit(10).flat_map(&:tags).map{|x| x.value if x.key == 'Name'}.compact
Run Code Online (Sandbox Code Playgroud)