Как фильтровать дублированные элементы до тех пор, пока не появится новый

#arrays #swift #filter #duplicates

#массивы #быстрый #Фильтр #дубликаты

Вопрос:

Я хочу отфильтровать дублированные элементы до тех пор, пока с помощью Swift не появится новый элемент. и я хочу сделать это для всего массива.

Пример: [1,1,1,2,2,1]

Вывод: [1,2,1]

Комментарии:

1. Пожалуйста, покажите нам код вашей последней попытки и где вы застряли

2. На самом деле у меня есть база данных области, из которой я извлекаю массив, и в этом массиве у меня есть дублированные элементы, которые я хочу отфильтровать, чтобы иметь уникальные элементы в последовательности. если я поделюсь своим кодом здесь, это будет более запутанным, то, что я хочу иметь в своем выводе, — это то, что я описал выше.

Ответ №1:

Вы можете использовать reduce(into:_:) для этого:

 let array = [1,1,1,2,2,1] let filtered = array.reduce(into: [Int]()) { partialResult, current in  guard let last = partialResult.last else { partialResult.append(current); return }  if last != current {  partialResult.append(current)  } } print(filtered)  

Мы перебираем массив. partialResult заполняется ли текущий новый массив. Мы проверяем, есть ли уже начальное значение, иначе мы добавляем его. Затем мы сравниваем последнее значение partialResult с текущим значением, повторенным в исходном массиве, чтобы решить, добавлять его или нет partialResult

Как только вы поймете логику, ее также можно будет написать с помощью:

 let filtered2 = array.reduce(into: [Int]()) { partialResult, current in  if partialResult.last != current {  partialResult.append(current)  } } print(filtered2)  

Комментарии:

1. спасибо большое за ваш полезный ответ, не могли бы вы также помочь мне с этой проблемой, я использую базу данных realm, и когда я хочу добавить в partialResult, я получаю эту ошибку «Нет точных совпадений при вызове метода экземпляра «добавить»» let data = RealmManager().fetchLocations(by: uuid) let filtered2 = data.reduce(into: [ActivityModel]()) { partialResult, current in if partialResult.last?.motionType != current.motionType { partialResult.append(current) } }

2. Это странно. Я попытался воспроизвести, но не смог допустить ошибки. Вы уверены data , что это а [ActivityModel] ? Если это [[Модель активности]], существует эта ошибка, но также и другая для if строки.