我试图学习如何在二维数组中搜索;例如:
array = [[1,1], [1,2], [1,3], [2,1], [2,4], [2,5]]
我想知道如何在数组中搜索[1, y]
形式的数组,然后显示其他y
数字:[1, 2, 3]
。
如果有人可以帮助我理解如何仅使用数字进行搜索(因为我发现的很多示例包括字符串或哈希值),甚至在哪里寻找合适的资源,这将有所帮助。
答案 0 :(得分:6)
您可以使用Array#select和Array#map方法:
array = [[1,1], [1,2], [1,3], [2,1], [2,4], [2,5]]
#=> [[1, 1], [1, 2], [1, 3], [2, 1], [2, 4], [2, 5]]
array.select { |el| el[0] == 1 }
#=> [[1, 1], [1, 2], [1, 3]]
array.select { |el| el[0] == 1 }.map {|el| el[1] }
#=> [1, 2, 3]
有关数组的更多方法,请探索docs。
答案 1 :(得分:6)
Ruby允许您通过在块参数中使用括号来查看元素。 select
和map
只分配一个块参数,但您可以查看该元素:
array.select{|(x, y)| x == 1}
# => [[1, 1], [1, 2], [1, 3]]
array.select{|(x, y)| x == 1}.map{|(x, y)| y}
# => [1, 2, 3]
您可以省略与|...|
:
array.select{|x, y| x == 1}
# => [[1, 1], [1, 2], [1, 3]]
array.select{|x, y| x == 1}.map{|x, y| y}
# => [1, 2, 3]
作为编码样式,将未使用的变量标记为_
:
array.select{|x, _| x == 1}
# => [[1, 1], [1, 2], [1, 3]]
array.select{|x, _| x == 1}.map{|_, y| y}
# => [1, 2, 3]
答案 2 :(得分:5)
如果你先选择然后映射,你可以使用grep函数在一个函数中使用它:
p array.grep ->x{x[0]==1}, &:last #=> [1,2,3]
答案 3 :(得分:1)
另一种做同样事情的方法是将Array#map与Array#compact一起使用。这样做的好处是只需要一个块和一个简单的操作,这使得它更容易理解。
array.map { |a, b| a if b == 1 }
#=> [1, 2, 3, nil, nil, nil]
array.map { |a, b| a if b == 1 }.compact
#=> [1, 2, 3]
答案 4 :(得分:1)
您可以使用each_with_object
:
array.each_with_object([]) { |(x, y), a| a << y if x == 1 }
#=> [1, 2, 3]