Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 返回多维数组的特定索引,无副作用_Arrays_Ruby - Fatal编程技术网

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"]