2012-08-07 62 views
2

另一个字符串我有这样一个字符串后反覆的字符串:如何匹配和红宝石

"abc-12\nxyz-17\nabc-18\npqr-13\n" 

我想每个字符串后数相匹配,并总结他们都放弃了。例如,我想总计1218abc。我如何去做这件事?

回答

2
s = "abc-12\nxyz-17\nabc-18\npqr-13\n" 

s.split.inject(Hash.new(0)) { |h,e| id, n = e.split('-'); h[id] += n.to_i; h } 
=> {"abc"=>30, "xyz"=>17, "pqr"=>13} 
+0

是否有一个Ruby成语的生成散列转换成两排。我想得到[“abc”,“xyz”,“pqr”]和[30,17,13]。我最终为此写了一个方法。 – navgeet 2012-08-08 04:26:10

+1

@navgeet - 'Hash'具有名为'keys'和'values'的方法。那些给你你需要的阵列分别。 – Casper 2012-08-08 10:10:47

2
"abc-12\nxyz-17\nabc-18\npqr-13\n".split("\n").inject(0) do |sum, line| 
    sum += line[/[\w]+(\d)+/].to_i 
end