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])}