如何用哈希值替换数组值?

时间:2017-05-26 08:43:24

标签: ruby

我有一个数组

@a = ["a","b","c","d"]

这是我的哈希

@a_hash ={"b"=> ["1","2","3"]}

现在我想将"b"的{​​{1}}值替换为数组。

我的预期结果是

@a_hash

我怎样才能在红宝石中得到这个?

4 个答案:

答案 0 :(得分:5)

也许是这样:

a = ["a","b","c","d"]
a_hash ={"b"=> ["1","2","3"]}

a.map! { |x| a_hash[x] || a } 
a #=> ["a",["1","2","3"],"c","d"]

答案 1 :(得分:3)

您可以使用#fetch方法

@a = ["a","b","c","d"]
#=> ["a", "b", "c", "d"]

@a_hash ={"b"=> ["1","2","3"]}
#=> {"b"=>["1", "2", "3"]}

@a.map! { |e| @a_hash.fetch(e, e) }
#=> ["a", ["1", "2", "3"], "c", "d"]

答案 2 :(得分:2)

使用Array#index

@a[@a.index("b")] = @a_hash["b"]
@a
#=> ["a", ["1", "2", "3"], "c", "d"]

如果您只出现一次“b&#39”,它可能是最快的解决方案。 每次出现" b":

@a.map! {|e| @a_hash["b"] if e == "b"}

答案 3 :(得分:0)

您可以将元素指定为散列键的值:

$('.directions-and-alternative-options-toggle').on('click', function(){
  var $img = $(this).find('img');
  if($(this).hasClass('collapsed')){
    $img.attr('src', $img.data('collapse_icon'));
  } else {
    $img.attr('src', $img.data('expand_icon'));
  }
})

那就是它。