我正在尝试学习如何在二维数组中进行搜索;例如:
array = [[1,1], [1,2], [1,3], [2,1], [2,4], [2,5]]
我想知道如何在数组中搜索形式为[1,y]
的数组,然后显示其他y
数字是什么:[1, 2, 3]
。
如果有人能帮助我理解如何仅搜索数字(因为我找到的许多示例包括字符串或哈希),甚至在哪里寻找正确的资源,那将非常有帮助。
我正在尝试学习如何在二维数组中进行搜索;例如:
array = [[1,1], [1,2], [1,3], [2,1], [2,4], [2,5]]
我想知道如何在数组中搜索形式为[1,y]
的数组,然后显示其他y
数字是什么:[1, 2, 3]
。
如果有人能帮助我理解如何仅搜索数字(因为我找到的许多示例包括字符串或哈希),甚至在哪里寻找正确的资源,那将非常有帮助。
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]
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]
要了解更多关于数组的方法,请浏览文档。
map{|el| el[1]}
写成 map(&:last)
。 - Cary Swovelandp array.grep ->x{x[0]==1}, &:last #=> [1,2,3]
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]
array.map { |a,b| b if a==1 }
)。然而,有一个问题:array = [[1,2],[1,nil]] #=> [2]
,而需要的是=> [2,nil]
。 - Cary Swoveland