我有一个图表,我需要从数组和“0”中删除重复值,例如我想根据那个调整数组
extension Array where Element: Equatable {
var unique: [Element] {
var uniqueValues: [Element] = []
forEach { item in
if !uniqueValues.contains(item) {
uniqueValues += [item]
}
}
return uniqueValues
}
}
let speed = [0, 10, 20, 20, 40, 50, 50 ,50, 80, 90, 100]
let time = ["9", "10", "11", "12", "13", "15", "16", "17", "18", "19", "20"]
speed.unique // Return Only Unique Values
现在我想更新我的时间数组。 例子 Index : 0, 3 - 从 speed 中移除 我也想从时间中删除索引 0、3
最佳答案
你可以这样做:
let speed = [ 0, 10, 20, 20, 40, 50, 50, 50, 80, 90, 100]
let time = ["9", "10", "11", "12", "13", "15", "16", "17", "18", "19", "20"]
var sp = [Int]()
var tm = [String]()
for (i, x) in speed.enumerated() {
if !sp.contains(x) {
sp.append(x)
tm.append(time[i])
}
}
print(sp) //[ 0, 10, 20, 40, 50, 80, 90, 100]
print(tm) //["9", "10", "11", "13", "15", "18", "19", "20"]
建议为 time
选择合适的类型。
在面向对象编程中建议将速度和时间作为结构的属性:
struct Mover {
let speed: Int
let time : TimeInterval
}
例如给定这个数组:
let movers = [Mover(speed: 0, time: 9),
Mover(speed: 10, time: 10),
Mover(speed: 20, time: 11),
Mover(speed: 20, time: 12),
Mover(speed: 40, time: 13),
Mover(speed: 50, time: 15),
Mover(speed: 50, time: 16),
Mover(speed: 50, time: 17),
Mover(speed: 80, time: 18),
Mover(speed: 90, time: 19),
Mover(speed: 100, time: 20)]
您可以通过这种方式使元素保持独特的速度:
var speeds = Set<Int>()
let moversUniqueSpeed = movers.filter { speeds.insert($0.speed).inserted }
关于arrays - 如何查找数组中重复项的索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56070166/