[英]How to compare array of dictionaries?
我有一個字典數組,其鍵可能因傳入數據而異。 例如,
arrayOfDict = [["default": "Accessibility", "cn": "為每個人而設計"],
["br": "Acessibilidade", "hk_cn": "輔助使用", "default": "Accessibility"],
["hk_cn": "輔助", "default": "Accessibility", "pl": "Ułatwienia dostępu"]]
我想遍歷每個字典以查找是否有任何鍵具有多個值並將多個值顯示給用戶,然后讓用戶選擇其中一個值,必須刪除剩余的值。(例如在上面的數組中“hk_cn”有兩個不同的值)
如果多個值相同,我想刪除其中一個鍵。 (例如:默認值在任何地方都有相同的值)
所以最后,我應該有一個來自 arrayOfDict 的字典。 所以最終結果應該是:如果用戶選擇了第一個“hk_cn”值。
["default": "Accessibility", "cn": "為每個人而設計","hk_cn": "輔助使用", "br": "Acessibilidade", "pl": "Ułatwienia dostępu" ]
1.使用flatMap(_:)
展平arrayOfDict
以獲得單個Dictionary
let combinedDict = arrayOfDict.flatMap{($0)}
2.使用init(grouping:by:)
根據key
對combinedDict
元素進行分組
let groupedDict = Dictionary(grouping: combinedDict) { $0.key }
3.使用mapValues(_:)
獲取formattedDict
let formattedDict = groupedDict.mapValues { Array(Set($0.map { $0.value })) }
formattedDict
字典 Output:
["pl": ["Ułatwienia dostępu"], "cn": ["為每個人而設計"], "br": ["Acessibilidade"], "default": ["Accessibility"], "hk_cn": ["輔助使用", "輔助"]]
現在,您可以使用formattedDict
提示用戶並詢問為各個鍵保留哪個值。
編輯:
根據您的評論,您可以在formattedDict
上使用allSatisfy(_:)
來檢查它是否包含每個key
的單個value
。
let formattedDict = groupedDict.mapValues { Set($0.map { $0.value }) }
if formattedDict.values.allSatisfy({ $0.count == 1 }) {
let newformattedDict = formattedDict.compactMapValues { $0.first }
} else {
//add your code to display data in table here...
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.