gpt4 book ai didi

ios - 如何通过 NSDictionary 中的键 :value, 过滤 NSArray

转载 作者:行者123 更新时间:2023-11-28 10:45:16 24 4
gpt4 key购买 nike

我想弄清楚如何通过值“name”过滤掉 NSArrays 的字典

// Is an Array of a dictionary, by key : values

var teamFilteredList = [[String:Any]]()
var teamList = [[String:Any]]()

获取:

    let string = "https://api/connect/"
let url = NSURL(string: string)
let request = NSMutableURLRequest(url: url! as URL)
request.httpMethod = "GET"
let session = URLSession.shared
let tache = session.dataTask(with: request as URLRequest) { (data, response, error) -> Void in
if let jsonObj = try? JSONSerialization.jsonObject(with: data!, options: .allowFragments) as! NSArray {
print(jsonObj)
teamList = jsonObj as! [[String : Any]]

DispatchQueue.main.async {
self.teamCollectionView.reloadData()
}
}
}
tache.resume()

此代码是结果并被放入 teamList

JSON:

({
id = 1;
logo = "testLogo";
name = "testTeam1";
"url" = "https://example.com";
},
{
id = 2;
logo = "testLogo";
name = "testTeam2";
"url" = "https://example.com";
},
{
id = 3;
logo = "testLogo";
name = "testTeam3";
"url" = "https://example.com";
})

放入 teamList 后的示例:

let example = [[id: "1", logo: "image", name: "testTeam1", url: "https"], [id: "2", logo: "image", name: "testTeam2", url: "https"]] 

试图过滤的代码:

 let array2Name = teamFilteredList.flatMap { $0["name"] }
teamFilteredList = teamList.reduce(teamFilteredList, { result, value in
!array2Name.contains(where: { $0 as! _OptionalNilComparisonType == value["testTeam3"] }) ? result + [value]: result
})

到目前为止,这段代码一直很糟糕。但是网上没有其他任何东西可以告诉我如何做到这一点。所以我被困住了。

导致崩溃:

Could not cast value of type '__NSCFString'

更新:

我有一个 Collection View ,它是从一个 NSURL 的提取中填充的,它给我一个充满 NSArrays 的字典,我想通过一个已经在 NSArray 索引中的值过滤掉该字典中的所有 NSArray 索引键:“名称”

此链接最终答案中回答了问题,但它不是最新的并且会产生错误。 here

最佳答案

就是这样,使用自定义结构和 JSONDecoder

就简单多了

创建一个结构

struct Team : Decodable {
let id : Int
let logo : String
let name : String
let url : URL
}

创建数组

var teamList = [Team]()
var teamFilteredList = [Team]()

解码JSON

let string = "https://api/connect/"
let url = URL(string: string)!
let task = URLSession.shared.dataTask(with: url) { (data, response, error) in
if let error = error { print(error); return }
do {
self.teamList = try JSONDecoder().decode([Team].self, from: data!)
DispatchQueue.main.async {
self.teamCollectionView.reloadData()
}
} catch {
print(error)
}
}
task.resume()

并对数组进行过滤

teamFilteredList = teamList.filter{ $0.name == "testTeam3" }

关于ios - 如何通过 NSDictionary 中的键 :value, 过滤 NSArray,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48782734/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com