将数组转换为哈希ruby

将数组转换为哈希ruby,ruby,arrays,hash,Ruby,Arrays,Hash,我在ruby中有这样的数组(文档语言[偶数索引]和字数[奇数索引]) 最终结果应如下所示: {"en"=>200,"ru=>360","es"=>140} 啊,你需要对重复的密钥求和。因此,Hash::[]方法在这里不起作用。没问题,使用+然后: 啊,你需要对重复的密钥求和。因此,Hash::[]方法在这里不起作用。没问题,使用+然后: 可以使用和首先将数组切片为块,然后添加值 这个版本大致相当于Sergio Tulentsev的版本,但略短一些(适用于Ruby 1.8) 请

我在ruby中有这样的数组(文档语言[偶数索引]和字数[奇数索引])

最终结果应如下所示:

{"en"=>200,"ru=>360","es"=>140}

啊,你需要对重复的密钥求和。因此,
Hash::[]
方法在这里不起作用。没问题,使用+然后:


啊,你需要对重复的密钥求和。因此,
Hash::[]
方法在这里不起作用。没问题,使用+然后:

可以使用和首先将数组切片为块,然后添加值

这个版本大致相当于Sergio Tulentsev的版本,但略短一些(适用于Ruby 1.8)

请注意,我使用默认值0初始化哈希。塞尔吉奥也可以这样做,所以他的版本看起来是这样的:

hash = words.each_slice(2).each_with_object(Hash.new(0)) do |(k, v), memo|
  memo[k] += v.to_i
end
请注意,Sergio使用的
每个带有_object的
都是在Ruby 1.9中引入的,因此在较旧的Ruby版本中不可用,尽管这可能不是一个问题。

您可以使用和,首先将数组分割成块,然后添加值

words = ['en', 200, 'ru', 120, 'es', 140, 'ru', 240]

words.
 each_slice(2).
 each_with_object(Hash.new(0)) {|(lang, wordcount), acc| acc[lang] += wordcount }
这个版本大致相当于Sergio Tulentsev的版本,但略短一些(适用于Ruby 1.8)

请注意,我使用默认值0初始化哈希。塞尔吉奥也可以这样做,所以他的版本看起来是这样的:

hash = words.each_slice(2).each_with_object(Hash.new(0)) do |(k, v), memo|
  memo[k] += v.to_i
end

请注意,Sergio使用的
每个带有_object的
都是在Ruby 1.9中引入的,因此在较旧的Ruby版本中不可用,这可能不是一个问题。

这不会产生期望的结果这不会产生期望的结果为什么
'120'
a
String
而其他数字是
Fixnum
s?为什么
'120'
a
String
而其他数字是
Fixnum
s?
words = ['en', 200, 'ru', 120, 'es', 140, 'ru', 240]

words.
 each_slice(2).
 each_with_object(Hash.new(0)) {|(lang, wordcount), acc| acc[lang] += wordcount }
hash = words.each_slice(2).each_with_object(Hash.new(0)) do |(k, v), memo|
  memo[k] += v.to_i
end
words = ['en', 200, 'ru', 120, 'es', 140, 'ru', 240]

words.
 each_slice(2).
 each_with_object(Hash.new(0)) {|(lang, wordcount), acc| acc[lang] += wordcount }