2013-05-31 112 views
-3

我有一个数组:a = ["a", "b", "c"],我想转换为散列h = {1=>"a", 2=>"b", 3=>"c"} 其中键是数组的位置。有任何想法吗?将数组转换为散列的最佳方式是什么?

+6

可以指定的语言吗? – Antoine

+0

你想在纸上做到这一点,或者你打算使用某种特定的编程语言吗? –

+0

看起来像红宝石 –

回答

3

一种方法是:

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

如果a.map不使用块,你会得到一个枚举对象,那么你可以得到通过遍历该枚举器与with_index迭代索引。然后,只需调整起始索引并按照Hash[]的正确顺序安排事情即可。

你也可以做这种方式(这是相当多的房子的Java回答的音译):

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

你做哪种方式,它主要是一个口味问题。

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]); 
} 
+0

'map.put(i + 1,array [i]);'OP想让键从1开始,你可以使用自动装箱。 –

0

尝试在Python中:

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

对不起,我忘了。该语言是红宝石 – madam

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

1..a.length给你[1,2,3](隐式转换后)

zip(一)给你[1,"a",2,"b",3,"c"]

+0

如果你是代码打高尔夫球,那么你可以使用大小,而不是长度,但我认为在这里长度读取更好。 –

相关问题