2017-03-03 91 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