Arrays 在swift 3中查找和匹配来自不同数组的两个整数的最佳方法?(多维数组)

Arrays 在swift 3中查找和匹配来自不同数组的两个整数的最佳方法?(多维数组),arrays,for-loop,multidimensional-array,foreach,swift3,Arrays,For Loop,Multidimensional Array,Foreach,Swift3,在Swift 3中,我有两个名为json和json2的多维数组,它们从api中获取一些代码。然后对第一个数组中的每个值执行一个for-each,对于数组中的每个值,我在数组2上循环查找匹配项,这似乎是一种非常糟糕的方法,我希望有一种可能更快的替代方法 这是我的密码: var json:[[String:Any]] = [] var json2:[[String:Any]] = [] for each in self.json { fo

在Swift 3中,我有两个名为json和json2的多维数组,它们从api中获取一些代码。然后对第一个数组中的每个值执行一个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]! }  
var cardBrands:[Int:[Int]]=[:]
json2.map{($0[“id”]!as!Int,$0[“coffeeBrandId”]!as!Int)}
.forEach{cardBrands[$0]=[$1]+(cardBrands[$0]??Array())}
让brandIds=json.flatMap{cardBrands[$0[“prepaidcoffeecardd”]!as!Int]!}

cardBrands dictionary只设置一次,并返回每个卡id的CoffeeBrandID列表。由于dictionary的内部索引,它将提供比遍历json2数组更快的结果。这将为您提供大约N+M的处理时间,而不是N*M。

严格来说,包含字典的数组不是多维数组。面向对象的方法是将字典映射到自定义结构或类。