Arrays Swift如何基于另一个数组筛选数组

Arrays Swift如何基于另一个数组筛选数组,arrays,swift,Arrays,Swift,我有一个数组VIPArray和AddressArray,因此我想根据VIPArray过滤AddressArray。我该怎么做 VIPArray看起来像这样 let VIPArray = [["name": "John B"], ["name": "Sara K"]] let AddressArray = [Address(name: "John B", imageURL: "johnb", address: "178 Main St."), Addre

我有一个数组
VIPArray
AddressArray
,因此我想根据
VIPArray
过滤
AddressArray
。我该怎么做

VIPArray
看起来像这样

let VIPArray = [["name": "John B"], ["name": "Sara K"]]
let AddressArray = [Address(name: "John B",  imageURL: "johnb", address: "178 Main St."),
                    Address(name: "Dave H",  imageURL: "daveh", address: "1011 Victoria St.."),
                    Address(name: "Sara K",  imageURL: "sarak", address: "279 Maple Av."),
                    Address(name: "Niles K", imageURL: "nilesk", address: "45 King St."),
                    Address(name: "Ingrid G",  imageURL: "ingridg", address: "33 Union St.")
AddressArray
如下所示

let VIPArray = [["name": "John B"], ["name": "Sara K"]]
let AddressArray = [Address(name: "John B",  imageURL: "johnb", address: "178 Main St."),
                    Address(name: "Dave H",  imageURL: "daveh", address: "1011 Victoria St.."),
                    Address(name: "Sara K",  imageURL: "sarak", address: "279 Maple Av."),
                    Address(name: "Niles K", imageURL: "nilesk", address: "45 King St."),
                    Address(name: "Ingrid G",  imageURL: "ingridg", address: "33 Union St.")
所以我想得到这个结果:(过滤的AddressArray)


1。您只需使用
for in-loop
过滤器即可获得预期值:

    for VIP in VIPArray
    {
        let result = AddressArray.filter({ $0.name == VIP["name"] })
        print(result)
    }
2.或者您可以使用
map
filter
的组合来获得期望值

    let result = VIPArray.map { (VIP) -> Address? in
        if let address = AddressArray.filter({ $0.name == VIP["name"] }).first
        {
                return address
        }
        return nil
    }
    print(result)
如果你还面临任何问题,请告诉我

struct Address {
    var name: String
    var imageURL: String
    var address: String
}

let VIPArray = [["name": "John B"], ["name": "Sara K"]]

let AddressArray = [Address(name: "John B",  imageURL: "johnb", address: "178 Main St."),
                    Address(name: "Dave H",  imageURL: "daveh", address: "1011 Victoria St.."),
                    Address(name: "Sara K",  imageURL: "sarak", address: "279 Maple Av."),
                    Address(name: "Niles K", imageURL: "nilesk", address: "45 King St."),
                    Address(name: "Ingrid G",  imageURL: "ingridg", address: "33 Union St.")]


var filtered = [Address]()

for element in VIPArray {
    for address in AddressArray {
        if element["name"] == address.name {
            filtered.append(address)
        }
    }
}

for record in filtered {
    print(record)
}
输出:

地址(名称:“约翰B”,图像URL:“约翰B”,地址:“缅因街178号”)

地址(名称:“sarak”,图像URL:“sarak”,地址:“枫叶大道279号”)

或:


这很简单,您的问题是完全开放的(“请为我编写我的全部代码”)。具体点。哪一部分你不知道怎么做?显示到目前为止的代码并解释问题所在。证明你做了一次诚实的尝试。
VIPArray
是数组数组还是字典数组?VIPArray是数组,而AddressArray是字典数组,这就是我被卡住的原因。马特,我尝试了太多不同的过滤解决方案,我都迷路了。没有什么对我有用,这就是为什么我没有发布任何东西。我搜索了所有可能的解决方案,其中大部分我都尝试过,但都没有找到。这是我最后的办法。对不起,您的
VIPArray
真的是
[[String]]
?您可以选择单击变量名进行检查。我也尝试了此操作,但我得到了相同的错误,即不能将“[String]”类型的值下标为“String”类型的索引什么是
VIPArray
AddressArray
?let result=VIPArray.map{(VIP)->Address?in if let Address=AddressArray.filter({$0.name==VIP[“name”]}。第一个{返回地址}返回零}打印(结果)确定。如果你的答案有效,请接受。祝你编码愉快
let VIPArray = [["name": "John B"], ["name": "Sara K"]]

struct Address {
    let name: String
    let imageURL: String
    let address: String
}

let addressArray = [Address(name: "John B",  imageURL: "johnb", address: "178 Main St."),
                    Address(name: "Dave H",  imageURL: "daveh", address: "1011 Victoria St.."),
                    Address(name: "Sara K",  imageURL: "sarak", address: "279 Maple Av."),
                    Address(name: "Niles K", imageURL: "nilesk", address: "45 King St."),
                    Address(name: "Ingrid G",  imageURL: "ingridg", address: "33 Union St.")]

let myVips = addressArray.filter() {VIPArray.contains(["name":$0.name])}