假設我們在 Kotlin 中有以下結構,例如:
val allExams = setOf("A", "B", "C", "D", "E", "F")
val examMap = mutableMapOf<String, Set<String>>()
examMap["1"] = setOf("A","B")
examMap["2"] = setOf("A","B","C")
examMap["3"] = setOf("A","B","C","D")
examMap["4"] = setOf("E")
examMap["5"] = setOf("F")
如何過濾以僅維護具有最大匹配元素數的地圖專案?
在上述示例中,我想洗掉examMap["1"],examMap["2"]因為在examMap["3"]我有"A", "B","C"和"D"(這是來自 的最大匹配元素數的專案allExams)。的examMap["4"]和examMap["5"]將要保持,因為是具有這些值在地圖上的唯一專案。
所以最后我希望地圖具有以下值:
examMap["3"] = setOf("A","B","C","D")
examMap["4"] = setOf("E")
examMap["5"] = setOf("F")
uj5u.com熱心網友回復:
這會給你預期的結果:
val result = mutableMapOf<String, Set<String>>()
examMap.toList().sortedByDescending { (_, v) -> v.size }
.forEach {
if (result.isEmpty()
|| result.values.none { rList -> rList.containsAll(it.second) }) {
result.put(it.first, it.second)
}
}
}
想法是:
- 首先按
set.size降序對映射中的集合進行排序。因為集合中的元素越多,它覆寫其他集合的機會就越大 - 然后從最大的集合開始,檢查已經選擇的集合(in
result)是否包含當前集合中的所有元素,以決定是否將其附加到result
使用給定的輸入,result將是:
{3=[A, B, C, D], 4=[E], 5=[F]}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/373920.html
下一篇:將遺漏的數字添加為字典的鍵
