首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Var命名Var

使用Var命名Var
EN

Stack Overflow用户
提问于 2014-10-20 22:23:05
回答 2查看 51关注 0票数 0

我试图动态地创建数组,并处理这些代码,但我什么也没有得到。

locations开始

代码语言:javascript
复制
locations = {"boston" => 1, "new_york" => 2 , "miami" => 3}

并使用:

代码语言:javascript
复制
locations.each {
|city, id|  puts "#{city}_angels"
}

期望的结果是初始化三个数组:boston_angelsnew_york_angelsmiami_angels

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-10-20 22:55:42

根据对这个问题的评论,有很多方法可以从可枚举的源中构造散列。each_with_object是我的最爱之一:

代码语言:javascript
复制
locations.keys.each_with_object({}) {|city, out| out[city] = [] }

inject/reduce是另一种选择:

代码语言:javascript
复制
locations.keys.inject({}) {|h, city| h[city] = []; h }

您还可以创建一个[city, []]数组,然后将其转换为一个哈希:

代码语言:javascript
复制
Hash[*locations.flat_map {|city, id| [city, []] }]

或者如果您使用的是Ruby 2.1:

代码语言:javascript
复制
locations.keys.map {|k| [k, []] }.to_h
票数 2
EN

Stack Overflow用户

发布于 2014-10-21 00:26:46

这个问题与散列location的值无关,所以让我们从以下几个方面开始:

代码语言:javascript
复制
cities = locations.keys
  #=> ["boston", "new_york", "miami"]

还有三种方法可以做到:

#1

代码语言:javascript
复制
Hash[cities.map { |c| [c, []] }]
  #=> {"boston"=>[], "new_york"=>[], "miami"=>[]}

使用Ruby 2.1+,您可以将Hash[arr]编写为arr.to_h

#2

代码语言:javascript
复制
cities.reduce({}) { |h,city| h.merge({ city=>[] }) }

#3

代码语言:javascript
复制
h = Hash.new { |h,k| h[k] = [] }
h.values_at(*cities)
h
  #=> {"boston"=>[], "new_york"=>[], "miami"=>[]}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26475925

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档