对数组的点表示法

时间:2016-04-18 07:11:39

标签: arrays ruby

我有一个字符串'tileBlock.tag.title'和一个像这样的哈希:

{
  "title"=>"headline",
  "body"=>"body text",
  "link"=>"#",
  "tileBlock"=>{"title"=>"Home", "tag"=>{"title"=>"home", "id"=>45}, "active"=>true}
}

有没有办法将'tileBlock.tag.title'转换为'object[:tileBlock][:tag][:title]

3 个答案:

答案 0 :(得分:2)

您可以使用哈希的dig()方法来检索您的值。您只需将字符串转换为键数组:

#Init values
my_string = 'tileBlock.tag.title'
my_hash = {
  "title"=>"headline",
  "body"=>"body text",
  "link"=>"#",
  "tileBlock"=>{
    "title"=>"Home", 
    "tag"=>{"title"=>"home", "id"=>45}, 
    "active"=>true
   }
}
#The code
my_keys = my_string.split('.')
# => ["tileBlock", "tag", "title"]
my_result = my_hash.dig(*my_keys)
# => "home"

Hash#dig()文档:http://ruby-doc.org/core-2.3.0_preview1/Hash.html#method-i-dig

答案 1 :(得分:1)

我不确定object是什么,但如果它是嵌套的哈希/数组,并且您想使用object[:tileBlock][:tag][:title]来调用s = 'tileBlock.tag.title',那么,

object.dig(*s.split(".").map(&:to_sym))

答案 2 :(得分:1)

您可以array1 = [product, php] array2 = [product management, html] 使用result = [product managemenet]

Enumerable#inject