将数组转换为哈希的最佳方法是什么?

时间:2013-05-31 23:21:00

标签: ruby arrays hash

我有一个数组:a = ["a", "b", "c"]我希望转换为哈希h = {1=>"a", 2=>"b", 3=>"c"} 其中键是数组的位置。有什么想法吗?

5 个答案:

答案 0 :(得分:3)

Ruby中的一种方式是:

h = Hash[a.map.with_index { |s, i| [ i + 1, s ] }]

如果a.map没有块,则会得到一个Enumerator对象,然后您可以通过使用with_index迭代该枚举器来获取索引。然后,只需调整起始索引并按正确顺序排列Hash[]的内容即可。

你也可以这样做(这几乎是House的Java答案的音译):

h = { }
a.each_with_index { |s, i| h[i + 1] = s }

你这样做的方式主要是品味。

答案 1 :(得分:1)

a = ["a", "b", "c"]
Hash[(1..a.length).zip(a)]

1..a.length为您提供[1,2,3](隐式转化后)

zip(a)为您提供[1,"a",2,"b",3,"c"]

答案 2 :(得分:0)

只需循环遍历数组,在Java中就是以下内容。

Map<Integer, String> map = new HashMap<Integer, String>();
for (int i = 0; i < array.length; i++) {
    map.put(Integer.valueOf(i), array[i]);
}

答案 3 :(得分:0)

在Python中试用:

>>> dict((k, v) for k, v in enumerate(["a", "b", "c"]))
{0: 'a', 1: 'b', 2: 'c'}

答案 4 :(得分:0)

a = ["a", "b", "c"]
Hash[a.map.with_index(1){|i,ind| [ind,i] }]
# >> {1=>"a", 2=>"b", 3=>"c"}