2015-07-29 4 views
0

У меня есть два массива, которые содержат объекты. Каждый объект имеет свойство «id». Если идентификатор имеет то же значение - он дублируется. Как я могу найти и удалить дубликаты путем сопоставления свойств?Как найти дубликаты в массивах?

Теперь я использую это, но иногда пропускает и записывает дубликаты в БД

func checkForDupl() { 

     for var i = 0; i < JSONStorage.count; i++ { 

      for var b = 0; b < CDStorage.count; b++ { 

       if JSONStorage[i]!.id == CDStorage[b]!.id { 

        JSONStorage.removeAtIndex(i) 
        if JSONStorage.isEmpty { 
         return 
        } 
       } 
      } 
     } 
    } 
+1

Вы удаляете элемент из массива, но вы все еще увеличиваете __i__, поэтому для каждого найденного дубликата есть возможность его пропустить. –

ответ

0

Я не редактировали функцию, так что больше не пропускает дубликаты

func checkForDupl() { 
    var i = 0 
    OUTER_LOOP: while i < JSONStorage.count { 
     for j in 0..<CDStorage.count { 
      if JSONStorage[i]!.id == CDStorage[j]!.id { 
       JSONStorage.removeAtIndex(i) 
       continue OUTER_LOOP 
      } 
     } 
     ++i 
    } 
} 

ПРИМЕЧАНИЕ: Эта функция только удаляет элементы из JSONStorage, которые присутствуют в CDStorage. Он не удаляется в пределах JSONStorage

+0

Большое спасибо! Я никогда раньше не видел OUTER_LOOP, о чем рассказывать в Google? Еще раз спасибо! –

+0

Его ярлык. При использовании 'continue' или' break', он существует только из самого внутреннего цикла. использование 'continue

Смежные вопросы