Arrays 返回多维数组的特定索引,无副作用
鉴于此多维数组:Arrays 返回多维数组的特定索引,无副作用,arrays,ruby,Arrays,Ruby,鉴于此多维数组: a = [ [0,'abc'], [1,'def'] ] 我只想返回键(其中键是子数组的索引0)和值(其中值是子数组的索引1): 我的解决方案是使用map返回集合,并使用shift和pop返回正确的项目: a.map(&:shift) => [0, 1] a.map(&:pop) => ["abc", "def"] 很好,但我注意到了副作用: a => [[], []] 有没有一种方法可以在没有副作用的情况下获得我拥有的功能?首先
a = [ [0,'abc'], [1,'def'] ]
我只想返回键(其中键是子数组的索引0)和值(其中值是子数组的索引1):
我的解决方案是使用map返回集合,并使用shift和pop返回正确的项目:
a.map(&:shift)
=> [0, 1]
a.map(&:pop)
=> ["abc", "def"]
很好,但我注意到了副作用:
a
=> [[], []]
有没有一种方法可以在没有副作用的情况下获得我拥有的功能?首先,将数组数组转换为哈希:
a = [ [0,'abc'], [1,'def'] ]
h = Hash[a]
然后获取键和值:
h.keys #=> [0, 1]
h.values # => ['abc', 'def']
您还可以更直接地获得相同的结果(如果子数组始终只有2个元素):
我无法编写
键
和值
,因为这些词通常是为哈希保留的。我不确定是否理解所需的输出,但Hash[a]
将返回{0=>“abc”,1=>“def”}
。这就是你想要的吗?@infused我的集合是一个子数组数组,而不是散列。如果这是一个杂烩,那就容易了。我可以只使用键和值方法。但对于数组,没有这样的键和值方法。我希望在一个数组中返回所有第一个位置,在另一个数组中返回所有最后的位置,正如我上面的示例所实现的那样。唯一的问题是副作用。这就是将数组转换为散列所能做的。我刚刚发布了一个完整的答案。@注入了很好的解决方案
h.keys #=> [0, 1]
h.values # => ['abc', 'def']
a = [ [0,'abc'], [1,'def'] ]
a.map(&:first) # => [0, 1]
a.map(&:last) # => ['abc', 'def']
a = [ [0,'abc'], [1,'def'] ]
k,v = a.transpose
#=> [[0, 1], ["abc", "def"]]
k #=> [0, 1]
v #=> ["abc", "def"]