2016-12-03 52 views
2

我有字符串,array1array2的兩個不同的陣列,其中,我想找出是否在array1的元素也array2存在而不array1修改元件,但array1中的值包含冒號:之後的額外字符。如何檢查是否在數組中的元素在另一個數組存在

array1 = ["unit 1 : Unit 1","unit 2 : Unit 2","unit 3 : Unit 3","test : Test", "system1"] 
array2 = ["unit 1","unit 2","unit 3","test"] 

我嘗試過使用include?,但它不起作用。

array1.each do |element| 
    #see if element exists in array 2 
    if array2.include? element 
     #print the name of that element 
     puts element 
    end 
end 

我該如何處理?

+0

請編輯以顯示你的例子所期望的結果。 –

回答

3

修復你的方法,你可能分裂elementspace + : + space並獲得first塊的檢查。代替if array2.include? element使用

if array2.include? element.split(' : ').first 

參見Ruby demo

+0

這不會修改array1中的elments嗎?如果沒有,這工作得很好!謝謝 – danynl

+0

當然,陣列保持不變。在這種情況下,'element'是真實數組元素的副本,請參閱http://ideone.com/msEgJV –

2
# Gather the prefixes from array1, without modifying array1: 
array1_prefixes = array1.map { |s| s.split(" : ").first } 

# Figure out which elements array1 and array2 have in common 
common_elements = array1_prefixes & array2 
# => ["unit 1", "unit 2", "unit 3", "test"] 

該解決方案依賴於操作者Array#&,其執行設置交集。

+0

或許''unit 1:Unit 1「.split(/ \ s *:\ s * /)# => [「unit 1」,「Unit 1」]',以防冒號兩邊沒有一個空格(如果提交者希望這種行爲)。或者,''單元1:單元1「[/.*?(?= \ s *:)/]#=>」單元1「。 –

0

我認爲這裏使用的最易讀的方法可能是startwith?,但是如果您知道某個鍵不能是另一個鍵的子字符串。

,看看是否所有的鍵到位:

array2.all? do |item| 
    array1.any?{|keyval| keyval.startwith? item } 
end 
相關問題