2016-10-10 61 views
0

我的繼承人成立如何檢查數組中的哈希值?

project_JSON = JSON.parse 

teamList = Array.new 

project = Hash.new() 
project["Assignee Name"] = issue["fields"]["assignee"]["displayName"] 
project["Amount of Issues"] = 0 

if !teamList.include?(issue["fields"]["assignee"]["displayName"]) 
    project_JSON.each do |x| 
     project["Amount of Issues"] += 1 
     teamList.push(project) 
end 

這一行有麻煩林。

if !teamList.include?(issue["fields"]["assignee"]["displayName"]) 

即使在.push之後,它總是返回true。我想創建一個我的團隊成員數組,並列出他們的名字在我的JSON中出現的次數。我在做什麼錯了,我如何在if語句中動態引用散列值(那是我認爲錯誤的地方,因爲如果我說.include?(issue["fields"]["assignee"]["displayName"])錯了,那麼它的nil和if語句將始終爲真)?

回答

0

在你的代碼中teamList是一個空數組,因此它不是include?什麼,它總是會返回false。現在,因爲您使用的是!運算符,它總是返回true。

EDIT

如果理解它的權利,則通過陣列檢查指定的值的每個元素必須循環。

下面是一個辦法做到這一點,你要知道我取代了符號鍵,因爲它是在Ruby中一個很好的做法:

issue = { 
    :fields => { 
     :assignee => { 
      :displayName => 'tiago' 
     } 
    } 
} 

teamList = Array.new 

def teamList.has_assignee?(assignee) 
    self.each do |e| 
     return e[:assignee] == assignee 
    end 
    false 
end 


project = Hash.new 
project[:assigneeName] = issue[:fields][:assignee][:displayName] 
project[:amountOfIssues] = 0 

teamList.push(project) unless teamList.has_assignee? issue[:fields][:assignee][:dsiplayName] 
teamList.push(project) unless teamList.has_assignee? issue[:fields][:assignee][:dsiplayName] 


puts teamList.inspect # only one object here 

由於塞爾吉奧指出,你可以使用.detect

def teamList.has_assignee?(assignee) 
     self.detect { |e| e[:assigneeName] == assignee } 
end 
+0

則將hashset推到teamList數組中,該數組給出if語句要比較的東西,即使這樣它也會返回true;這就是我的問題所在 – EXC3ll3NTrhyTHM

+0

@ EXC3ll3NTrhyTHM我編輯了我的答案,因爲我不知道你的數據集我不得不創建問題對象 – Tiago

+1

更好地使用'.detect'來實現'has_assignee?' –