我有一个 swift 数组,我想从重复值(及其值)中删除重复的单个值,如下所示:
var myArray = [
[
"name": "John",
"age": 21
],
[
"name": "Bob",
"age": 35
],
[
"name": "Nyan",
"age": 20
],
[
"name": "Nyan",
"age": 20
]
]
Run Code Online (Sandbox Code Playgroud)
我使用以下代码删除重复值
for i in 0...myArray.count - 1{
if(myArray[i]["name"] as! String == "Nyan"){
print(myArray.remove(at: i))
}
}
print(myArray)
Run Code Online (Sandbox Code Playgroud)
这不会减少 myArray.count 并给出致命错误:索引超出范围
所需的输出:
[
"name": "John",
"age": 21
],
[
"name": "Bob",
"age": 35
],
[
"name": "Nyan",
"age": 20
]
Run Code Online (Sandbox Code Playgroud)
而不是删除我建议创建新数组的项目。
您还需要一个辅助数组来收集名称。如果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)
Run Code Online (Sandbox Code Playgroud)
而且 - 只是为了好玩 - 使用符合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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2408 次 |
| 最近记录: |