как найти индекс дубликатов элементов в массиве - PullRequest
1 голос
/ 10 мая 2019

У меня есть с графиком, мне нужно удалить дубликаты значений из массива и "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 

Теперь я хочу, чтобы мой массив времени обновлялся. пример Индекс: 0, 3 - снято с скорости я также хочу удалить индекс 0, 3 из времени

1 Ответ

2 голосов
/ 10 мая 2019

Вы можете сделать это так:

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 }
...