在Ruby中将特定字符串映射到散列的最有效方法

Win*_*lly 3 ruby

我是Ruby的新手,正在开发一个解析我的一些报告的CLI应用程序.我想通过这一行找出实现以下目标的最有效方法:

MAXCONN: 2000, MAXSSL_CONN: 500, PLAINCONN: 34, AVAILCONN: 1966, IDLECONN: 28, SSLCONN: 0, AVAILSSL: 500
Run Code Online (Sandbox Code Playgroud)

我想相应地将其映射到哈希:

{ :maxconn => 2000, :maxssl_conn => 500, :plainconn => 34, :availconn => 1966, :idleconn => 28, :sslconn => 0, :availssl => 500 }
Run Code Online (Sandbox Code Playgroud)

我能想到的唯一方法就是用逗号分割,然后再用分号分开并映射它们.

我有一种潜在的怀疑,可能会有一些Ruby魔法以更有效和更简单的方式实现这一点.

任何输入和/或技巧/提示都会受到赞赏,因为我有一种感觉,我会相对经常地接近这样的问题.

Tom*_*Tom 7

我们将用于转换一堆键值对的技术组合成一个哈希

Hash[[[k1, v1], [k2, v2], ...]] #=> { k1 => v1, k2 => v2, ... }
Run Code Online (Sandbox Code Playgroud)

使用正则表达式方法String#scan,它通过一个字符串并收集数组中的匹配项来获取

Hash[reports.scan(/(\w+): (\w+)/).map { |(first, second)| [first.downcase.to_sym, second.to_i] }]
Run Code Online (Sandbox Code Playgroud)

这也使用了一个块,Enumerable#map它将数组解释为(first, second)参数列表中的元素对,将这些元素提取为新元素,并将转换应用于它们,以便根据示例的规范定制生成的哈希值(否则,您只需获取字符串的哈希值映射到字符串).