假设我有一个如下所示的数组:
[[1830, 1], [1859, 1]]
Run Code Online (Sandbox Code Playgroud)
我想要做的是快速扫描内部数组,看看它们中是否包含数字1830.如果是这样,我希望它返回包含数字的整个数组1830,也就是[1830, 1]上面的例子.
我知道一个正常的值数组,我会这样做array.include? 1830,但这在这里不起作用,如下所示:
@add_lines_num_start
#=> [[1830, 1], [1859, 1]]
@add_lines_num_start.include? 1830
#=> false
@add_lines_num_start.first.include? 1830
#=> true
Run Code Online (Sandbox Code Playgroud)
我怎么做?
a = [[1830, 1], [1859, 1]]
a.find { |ar| ar.grep(1830) }
#=> [1830, 1]
Run Code Online (Sandbox Code Playgroud)
参考文献:
正如@Ilya在评论中提到的,不是遍历整个数组,而是grep使用该方法返回布尔值,找到匹配条件的元素:
a.find { |ar| ar.include?(1830) }
Run Code Online (Sandbox Code Playgroud)
参考文献:
如果您的阵列中有多个匹配的数组,则可以使用Enumerable#find_all:
a = [[1830, 1], [1859, 1], [1893, 1830]]
a.find_all { |ar| ar.include?(1830) }
#=> [[1830, 1], [1893, 1830]]
Run Code Online (Sandbox Code Playgroud)