Ruby访问数组元素

时间:2010-10-02 13:26:22

标签: ruby

我有一个看起来像这样的数组。

[{"EntryId"=>"2", "Field1"=>"National Life Group","DateCreated"=>"2010-07-30 11:00:14", "CreatedBy"=>"tristanoneil"},
 {"EntryId"=>"3", "Field1"=>"Barton Golf Club", "DateCreated"=>"2010-07-30 11:11:20", "CreatedBy"=>"public"},
 {"EntryId"=>"4", "Field1"=>"PP&D Brochure Distribution", "DateCreated"=>"2010-07-30 11:11:20", "CreatedBy"=>"public"}, 
 {"EntryId"=>"5", "Field1"=>"Prime Renovation Group, DreamMaker Bath & Kitchen",  "DateCreated"=>"2010-07-30 11:11:21", "CreatedBy"=>"public"}
]

我将如何遍历此数组以便我可以指定要打印的字段并获取值,因此我可以执行类似的操作。

puts EntryId.value

3 个答案:

答案 0 :(得分:7)

看起来这几乎是一个哈希数组。假设它存储在如下变量中:

data = [{"EntryId"=>"2", "Field1"=>"National Life Group"},
        {"EntryId"=>"3", "Field1"=>"Barton Golf Club"},
        {"EntryId"=>"4", "Field1"=>"PP&D Brochure Distribution"}
       ]

可以使用方括号中的索引访问Array的单个元素。可以使用方括号中的键访问哈希值。例如,要获取您将使用的第二个数组元素的“Field1”的值:

data[1]["Field1"]

您可以使用Enum mixin中定义的方法轻松遍历数组。

如果要处理数组,可以使用每个数组:此代码将打印数组中每个元素的Entry Id值。

data.each{|entry| puts entry["EntryId"]}

此数据不需要存储在变量中即可工作。您可以使用以下方法直接访问匿名数组:

例如,这将返回一个字符串数组。其中每个元素都是返回数组的元素是原始数组中相应元素的格式变体。

[{"EntryId"=>"2", "Field1"=>"National Life Group"},
 {"EntryId"=>"3", "Field1"=>"Barton Golf Club"},
 {"EntryId"=>"4", "Field1"=>"PP&D Brochure Distribution"}
].map{|e| "EntryId: #{e["EntryId"]}\t Company Name: #{e["Field1"]}"}

答案 1 :(得分:7)

大括号和hashrockets(=>)的存在意味着你正在处理Ruby Hash,而不是数组。

幸运的是,检索与任何一个键(hashrocket左边的东西)相关联的值(hashrocket右边的那个)是Hashes的一块蛋糕:你所要做的就是使用{ {1}}运营商。

[]

以下是Hash的文档:http://ruby-doc.org/core/classes/Hash.html

答案 2 :(得分:3)

每当我看到多维数组时,我想知道是否使用一个小类或结构来简化和更容易理解它,就像一个轻量级的类。

e.g。

# define the struct
Thing = Struct.new( "Thing", :entry_id, :field_1, :date_created , :created_by)

directory = Hash.new     # create a hash to hold your things keyed by entry_id

# create your things and add them to the hash
thing = Thing.new(2, "National Life Group", "2010-07-30 11:00:14", "tristanoneil" )
directory[thing.entry_id] = thing

thing = Thing.new(3, "Barton Golf Club", "2010-07-30 11:00:14", "public" )
directory[thing.entry_id] = thing                    

thing = Thing.new(4, "PP&D Brochure Distribution", "2010-07-30 11:00:14", "public" )
directory[thing.entry_id] = thing

thing = Thing.new(5, "Prime Renovation Group, DreamMaker Bath & Kitchen", "2010-07-30 11:00:14", "public" )
directory[thing.entry_id] = thing


# then retrieve what you want from the hash
my_thing = directory[3]
puts my_thing.field_1

创建类似于保存数据的结构的优点是,您可以对每个项目执行任何操作 - 将它们放入数组,哈希,等等,并仍然通过object.fieldname访问每个单独的项目及其字段。符号