如何更改散列键

我有这样的哈希:

test
 => {"QTC-1 test"=>"pass", "QTC-2 test"=>"fail"}

我想把每个关键字都放在散列表中,并删除数字后面的所有字符,例如:

“QTC-1测试”应该等于“QTC-1”

我接近解决方案但并不完全:

str = test.keys[0]
 => "QTC-1 test" 

new = str.slice(0..(str.index(/d/)))
 => "QTC-1" 

但需要一些帮助来做到这一点与散列键。

奖金

将值更改为相应的数字值:

所以如果value = pass,那么将其更改为1或者如果value = fail,则将其更改为2。

奖金可能的答案:

scenarios.each_pair { |k, v| 

  case v
  when 'pass'
    scenarios[k] = 1
  when 'fail'
    scenarios[k] = 2
  when 'block'
    scenarios[k] = 3
  else
    scenarios[k] = 4
  end

  }

这个答案修改了原始的哈希,而不是创建一个新的哈希。

h = {"QTC-1 test"=>"pass", "QTC-2 test"=>"fail"}
h.keys.each{|k| h[k[/.*d+/]] = h.delete(k)}
h #=> {"QTC-1"=>"pass", "QTC-2"=>"fail"}

使用Ruby 2.1.2:

test = {"QTC-1 test"=>"pass", "QTC-2 test"=>"fail"}
(test.keys.map { |k| k.sub /stestz/, '' }.zip test.values).to_h 
#=> {"QTC-1"=>"pass", "QTC-2"=>"fail"}

这里的想法是,您从每个键中剥离字符串“test”,将它与来自原始散列的值一起压缩,然后将结果数组转换为散列。


new_hash = {}
old_hash = {"QTC-1 test"=>"pass", "QTC-2 test"=>"fail"}
old_hash.map{|key, value| new_hash[key.split(" ").first]=value}

p new_hash
链接地址: http://www.djcxy.com/p/25647.html

上一篇: How to change hash keys

下一篇: How does the 'case' statement work with constants?