这是我的两个数组
Arrayone = [{keyphraseId:"tcpid1234",name:"shakti"},{keyphraseId:"tcpid456",name:"shakti"},{keyphraseId:"tcpid897",name:"srichandan "},{keyphraseId:"tcpid779",name:"prakash"}]
Arraytwo = [{idstring:"tcpid1234",name:"shakti"},{idstring:"tcpid456",name:"shakti"}]
我想在数组2的基础上过滤数组一,即(我想得到数组1的所有元素,其中没有数组二中的idstring
答案 0 :(得分:3)
如果你不介意O(n ^ 2),那么直接一步测试。
let arrayOne = [["keyphraseId":"tcpid1234", "name":"shakti"], ["keyphraseId":"tcpid456", "name":"shakti"], ["keyphraseId":"tcpid897", "name":"srichandan "], ["keyphraseId":"tcpid779", "name":"prakash"]]
let arrayTwo = [["idstring":"tcpid1234", "name":"shakti"],["idstring":"tcpid456", "name":"shakti"]]
arrayOne.filter { one in
!arrayTwo.contains { two in
one["keyphraseId"] == two["idstring"]
}
}
如果您想要更好的性能O(n),请将stringid
放入集合
let arrayOne = [["keyphraseId":"tcpid1234", "name":"shakti"], ["keyphraseId":"tcpid456", "name":"shakti"], ["keyphraseId":"tcpid897", "name":"srichandan "], ["keyphraseId":"tcpid779", "name":"prakash"]]
let arrayTwo = [["idstring":"tcpid1234", "name":"shakti"],["idstring":"tcpid456", "name":"shakti"]]
let idstrings = Set(arrayTwo.flatMap { $0["idstring"] })
arrayOne.filter {
guard let keyphraseId = $0["keyphraseId"] else { return false }
return !idstrings.contains(keyphraseId)
}
答案 1 :(得分:2)
您有2个数组,如下所示:
idStrings
要过滤数组,您需要执行以下两个步骤:
- 列出
从
arrayTwo
arrayOne
- 醇>
过滤
idString
并在步骤1中抓取keyphraseId
从arrayOne获取元素
其idstring
位于arrayTwo中 let arrayTwoIds = arrayTwo.map { $0["idstring"] }
let filteredResults = arrayOne.filter { arrayTwoIds.contains($0["keyphraseId"]) }
print(filteredResults)
:
keyphraseId
其idstring
不在于arrayTwo !
:
只需将 let filteredResults = arrayOne.filter { !arrayTwoIds.contains($0["keyphraseId"]) }
置于过滤条件:
{{1}}
希望这会有所帮助。