gpt4 book ai didi

swift - 从字典数组中删除重复值

转载 作者:搜寻专家 更新时间:2023-11-01 06:01:13 25 4
gpt4 key购买 nike

我在 swift 中有一个数组,我想像这样从重复值(及其值)中删除重复的一个值:

var myArray = [
[
"name": "John",
"age": 21
],
[
"name": "Bob",
"age": 35
],
[
"name": "Nyan",
"age": 20
],
[
"name": "Nyan",
"age": 20
]
]

我使用以下代码删除重复值

for i in 0...myArray.count - 1{
if(myArray[i]["name"] as! String == "Nyan"){
print(myArray.remove(at: i))
}
}

print(myArray)

这不会减少 myArray.count 并给出 fatal error :索引超出范围
期望的输出:

[
"name": "John",
"age": 21
],
[
"name": "Bob",
"age": 35
],
[
"name": "Nyan",
"age": 20
]

最佳答案

我建议创建一个新数组,而不是删除项目。

您还需要一个辅助数组来收集名称。如果 names 数组不包含当前名称,则将名称添加到数组并将项目添加到 result

let myArray = [
["name": "John","age": 21],
["name": "Bob", "age": 35],
["name": "Nyan", "age": 20],
["name": "Nyan", "age": 20]]

var names = [String]()
var result = [[String:Any]]()

for item in myArray {
let name = item["name"] as! String
if !names.contains(name) {
names.append(name)
result.append(item)
}
}

print(result)

并且 - 只是为了好玩 - 使用符合 Hashable 的结构的解决方案。

从数组创建一个 Set(这使得项目唯一),然后从该集合创建一个数组。

struct Person : Hashable { let name : String; let age : Int }

let myArray = [Person(name: "John", age: 21), Person(name: "Bob", age: 35), Person(name: "Nyan", age: 20), Person(name: "Nyan", age: 20)]
let result = Array(Set<Person>(myArray))

print(result)

关于swift - 从字典数组中删除重复值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49883972/

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