Swift 3의 다른 배열에서 두 개의 정수를 찾아 일치시키는 가장 좋은 방법은 무엇입니까? (다차원 배열)

Sebastian Ryberg

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

이것은 내가 얻고 싶은 가치이지만, 그것들을 얻는 접근 방식은 많은 힘을 필요로하는 것 같습니다. 더 쉬운 해결책을 바라고 있었나요?

알랭 T.

선불 카드가 많은 경우 사전을 사용하여 임시 색인을 작성하면 좋은 성능을 얻을 수 있습니다.

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] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관