2017-03-03 94 views
0

说我有一个数组的数组,看起来像这样:如何检查数组的数组是否在内部数组中有值?

[[1830, 1], [1859, 1]] 

我想要做的是快速扫描阵列内部,看看其中是否包含数字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 

我该怎么办呢?

+1

假设数组是'[[1830,1],[2,1830],[3,1492]]',感兴趣的数目是'1830'。是否[[1830,1],[2,1830]]被退回? –

+0

@CarySwoveland是的,你是对的。 – marcamillion

回答

6
a = [[1830, 1], [1859, 1]] 
a.find { |ar| ar.grep(1830) } 
#=> [1830, 1] 

参考文献:

编辑1

由于@Ilya在评论中提到的,而不是遍历整个阵列grep可以使用,返回boolean o的方法符合条件NCE元素被发现:

a.find { |ar| ar.include?(1830) } 

参考文献:

编辑2

在情况(来自@卡里的OP下评论无耻地窃取)你在阵列中将有多个匹配阵列,您可以使用Enumerable#find_all

a = [[1830, 1], [1859, 1], [1893, 1830]] 
a.find_all { |ar| ar.include?(1830) } 
#=> [[1830, 1], [1893, 1830]] 
+0

完美。这正是我正在寻找的。谢谢! – marcamillion

+0

@marcamillion no probs :) –

+1

'include?'似乎更具可读性,而且:它更高效,在这种情况下不扫描整个数组。 – Ilya