我刚开始学习 Erlang,非常喜欢他们的列表理解语法,例如:
Weather = [{toronto, rain}, {montreal, storms}, {london, fog}, {paris, sun}, {boston, fog}, {vancounver, snow}].
FoggyPlaces = [X || {X, fog} <- Weather].
在这种情况下,FoggyPlaces
将评估为“伦敦”和“波士顿”。
在 Ruby 中执行此操作的最佳方法是什么?
例如,一个像这样的数组(我相信很常见):
weather = [{city: 'toronto', weather: :rain}, {city: 'montreal', weather: :storms}, {city: 'london', weather: :fog}, {city: 'paris', weather: :sun}, {city: 'boston', weather: :fog}, {city: 'vancounver', weather: :snow}]
到目前为止,我得到的最好的是:
weather.collect {|w| w[:city] if w[:weather] == :fog }.compact
但是在这种情况下,我必须调用compact
来删除nil
值,并且示例本身不像 Erlang 那样可读。
更重要的是,在 Erlang 的例子中,city
和weather
都是原子。我什至不知道如何在 Ruby 中获得有意义且看起来不错的东西。