2016-04-21 70 views
0

的陣列我有一個陣列像哈希:紅寶石,我如何比較兩對項目的散列

arry = {hash1, hash2, hash3,hash4 ....hash_N} 

每個哈希,

hash1 ={ "deviceId"=>"868403021230682", "osVersion"=>"6.0", "deviceOS"=>"Android", 
"appVersion"=>"1.7.2", "action"=>"Enter"} 
hash2 = { "deviceId"=>"868403021230682", "osVersion"=>"6.0", "deviceOS"=>"Android", 
"appVersion"=>"1.7.2", "action"=>"Leave"} 

,因爲它有可能爲每個hash "action"=>"Enter" or "Leave"不會總是顯示爲一對,例如,動作對於hash3,hash4,hash5可能都是「Enter」。我的想法是隻考慮兩個哈希誰可以做一個像hash1和hash2,從數組中刪除其他數組或將其放入其他數組。 所以新陣列應該只包含[hash1, hash2, hash7,hash8],可以說hash7和8也是一對。

我應該使用each_with_index嗎?我的代碼是這樣的:

def get_result(doc) 
result = [] 

doc.each_slice(2).map { |pair| 
    pair.each_with_index { |element, index| 
    if (pair[index].has_value?([:action] => "enter") &&pair[index+1].has_value?([:action] => "Leave") 
     result.push(pair) 
    end 
    } 
} 
end 

if語句不工作的權利,那種困惑如何使用each_with_index希望有人能幫助我

回答

1

根據您的方法創建的,你的方式可以這樣來做:

def get_result(doc) 
    doc.each_sli­ce(2).to_a­.map{ |ah| ah if ah[0][:action] == 'Enter'­ && ah[1]­[:action] == 'Leave'­}.compact.flatten 
end 

說明

在v易變的doc是一個散列數組[hash1, hash2, ...]當我們創建doc.each_slice(2).to_a時會返回一對散列數[[hash1, hash2],[hash3,hash4]...],現在當我們做map並得到每個訂單('Enter','Leave')有actions的散列對時,我們得到一個具有這樣的零值的數組,如[[hash1,hash2],nil,[hash5,hash6]..]。我們使用compact來刪除nil的值。現在陣列是這樣[[hash1,hash2],[hash5,hash6]..](對哈希數組)和預期結果是哈希的數組,這就是爲什麼我們需要flatten,它會刪除內部數組並返回這樣[hash1, hash2, hash5, hash6 ...]

數組如果您需要要獲得已刪除的哈希列表,我認爲如果添加其他方法來執行它會更好。否則,您可以使get_result方法返回兩個數組。

這裏是你如何能做到這:

def get_result(doc) 
    removed_elms = [] 
    result = doc.each_sli­ce(2).to_a­.map do |ah| 
    # if you just need them different (not the first one 'Enter' and the second one 'Leave') you need to set the commented condition 
    # if ['Enter','Leave'].include?(ah[0][:action] && ah[1][:action]) && ah[0][:action] != ah[1][:action] 
    if ah[0][:action] == 'Enter'­ && ah[1]­[:action] == 'Leave' 
    ah 
    else 
    removed_elms << ah 
    nil 
    end 
    end.compact 
    [result.flatten, removed_elms.flatten] 
end 
+0

我怎麼能拋棄哈希值保存到另一個陣列?爲什麼需要平坦?我只想消除未配對的哈希。如果可能的話,你會介意一下嗎?謝謝 – roccia

+0

@roccia我更新了我的答案,希望對你有幫助 –

+0

謝謝!這很清楚! – roccia