鉴于这个多维数组:
a = [ [0,'abc'], [1,'def'] ]
我想只返回键(其中键是子数组的索引0)和只返回值(其中值是子数组的索引1):
a.keys
# => [0,1]
a.values
# => ['abc','def']
我的解决方案是使用map返回一个集合并使用shift和pop返回正确的项目:
a.map(&:shift)
=> [0, 1]
a.map(&:pop)
=> ["abc", "def"]
很棒,但后来我发现了副作用:
a
=> [[], []]
有没有办法获得我的功能,但没有副作用?
答案 0 :(得分:5)
首先,将数组数组转换为Hash:
a = [ [0,'abc'], [1,'def'] ]
h = Hash[a]
然后获取键和值:
h.keys #=> [0, 1]
h.values # => ['abc', 'def']
您也可以更直接地获得相同的结果(如果子数组总是只有2个元素):
a = [ [0,'abc'], [1,'def'] ]
a.map(&:first) # => [0, 1]
a.map(&:last) # => ['abc', 'def']
答案 1 :(得分:3)
a = [ [0,'abc'], [1,'def'] ]
k,v = a.transpose
#=> [[0, 1], ["abc", "def"]]
k #=> [0, 1]
v #=> ["abc", "def"]
我无法自己写keys
和values
,因为这些词通常是为哈希保留的。