Swift 3에는 api에서 코드를 가져 오는 json과 json2라는 두 개의 다차원 배열이 있습니다. 그런 다음 첫 번째 배열에서 for each를 수행하고 해당 배열 내부의 각 값에 대해 배열 2를 반복하여 일치 항목을 찾습니다.이 작업을 수행하는 정말 나쁜 방법 인 것 같습니다. 아마도 더 빠른 대체 방법을 기대하고 있었습니까?
내 코드는 다음과 같습니다.
var json:[[String:Any]] = []
var json2:[[String:Any]] = []
for each in self.json {
for each2 in self.json2 {
if(each["PrePaidCoffeeCardId"]! as! Int == each2["id"]! as! Int)
{
print(each2["coffeeBrandId"]! as! Int)
}
}
}
그러면 콘솔에 출력이 반환됩니다.
2
2
3
이것은 내가 얻고 싶은 가치이지만, 그것들을 얻는 접근 방식은 많은 힘을 필요로하는 것 같습니다. 더 쉬운 해결책을 바라고 있었나요?
선불 카드가 많은 경우 사전을 사용하여 임시 색인을 작성하면 좋은 성능을 얻을 수 있습니다.
var cardBrands:[Int:[Int]] = [:]
json2.map{ ($0["id"]! as! Int, $0["coffeeBrandId"]! as! Int) }
.forEach{ cardBrands[$0] = [$1] + (cardBrands[$0] ?? Array<Int>()) }
let brandIds = json.flatMap{ cardBrands[ $0["PrePaidCoffeeCardId"]! as! Int]! }
cardBrands 사전은 한 번만 설정되며 각 카드 ID의 coffeeBrandId 목록을 반환합니다. 사전의 내부 인덱싱으로 인해 json2 배열을 반복하는 것보다 훨씬 빠른 결과를 제공합니다. 이렇게하면 N * M 대신 대략 N + M 처리 시간이 제공됩니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다