Ruby:将一组键映射到值速记

标签 ruby hash dictionary proc collect

我最近刚开始使用 Ruby,我希望有一个使用绑定(bind)方法作为 proc 的简写,但我缺少。我基本上是在尝试这样做

SYMBOLS = {"I" => 1, "V" => 5, "X" => 10, ... }

roman = "zXXIV".upcase.chars.collect { |c| SYMBOLS[c] }
=> [nil, 10, 10, 1, 5]

我觉得在 ruby​​ 中应该有一个简单的方法来使用 SYMBOLS[] 作为绑定(bind)方法,所以就

roman = str.upcase.chars.collect &:SYMBOLS[]

解决方案 Ruby 1.9.3

roman = SYMBOLS.values_at(*str.upcase.chars)

最佳答案

SYMBOLS.values_at(str.upcase.chars.to_a)

关于使用 SYMBOLS[],您仍然需要将字符传递给方法。

您可以通过 SYMBOLS.method(:[])获取方法,例如,

> p = SYMBOLS.method(:[])
> p.call("X")
=> 10

我不相信它在这种情况下是最可读的——对我来说,调用 map 并传入 SYMBOLS[],虽然简洁且实用,但会延迟理解什么是发生的时间比我希望的要长。

关于Ruby:将一组键映射到值速记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14486626/

相关文章:

ruby - 在不覆盖现有值的情况下向现有(哈希)键添加值?

python - 选择 key :value pairs from a dictionary in Python

Python - 来自 CSV 文件的字典,每个键有多个值

ruby-on-rails - 如何在 Nginx 服务器上的 AWS 中使用 Https?

c - RobertSedwick 书中的哈希溢出和下溢

ruby-on-rails - 如何使 Rails 3.1 默认使用 SASS(Over SCSS)?

algorithm - universal hashing是不是每次操作完成后都会重新选择一个新的hash函数?

groovy - 迭代时从映射中删除键/值

ruby - 将 RSS pubDate 日期转换为 MM-DD-YY HH :MM

ruby-on-rails - 设计处理重复的登录请求