2014-09-15 2 views
0

Мое приложение сканирует устройства Bluetooth и показывает их в таблице. Но иногда он сканирует одно и то же устройство два или более раза и показывает одно и то же устройство много раз в таблице.Как фильтровать повторяющиеся данные из UITableView

Мне нужно отфильтровать его. Когда повторяется Имя или UUID устройства, таблица будет отображаться только один раз.

EDIT: Это То, что я пробовал, но не работает ...

  CBPeripheral peripheral = this._peripherals [indexPath.Row]; 
     List<string> filter = new List<string>(); 
     filter.Add (peripheral.Identifier.AsString()); 

     string[] array = {}; 

     foreach (var c in filter) { 
      if (!ReferenceEquals (c, array)) { 
       int x = array.Length; 
       filter.CopyTo (0, array, 0, x); 
      } 

     } 

     foreach (string i in array) { 
      Console.WriteLine ("ARRAY: "+i.ToString()); 
     } 
+0

Посмотрите принятый ответ на этот вопрос по ссылке! http://stackoverflow.com/questions/1439564/iphone-getting-unique-values-from-nsarray-object –

+0

Как выглядят данные в виде таблицы? Используете ли вы объекты модели или просто имя устройства в массиве? Когда вы дважды сканируете устройство, у вас есть два объекта модели с одинаковыми значениями или это один и тот же объект в массиве дважды? Если последний, используйте NSSet или NSOrderedSet вместо массива. – skladek

+0

Nofel, я разработчик Xamarin. Вы отправляете мне тему с кодом Xcode. Я новичок –

ответ

0

Предполагая, что ваши данные List<string>, вам необходимо либо

а. проверьте наличие дубликатов при добавлении нового элемента в свой список

if (!data.Contains(bt_id)) { 
    data.Add(bt_id); 
} 

b. удалить дубликаты после факта

// requires System.Linq 
var display_data = data.Distinct(); 
0

При просмотре устройств в области, хранить все устройства в массиве.

Тогда вы можете

  • чистый массив двойников и использовать его для заполнения TableView
  • Добавьте каждый объект из массива в Tableview, и проверьте, что вы добавляете к Tableview в массиве еще не существует.

Если вы можете, просто сохраните свой UDID или любой уникальный код, который вы можете использовать в словаре, и используйте тот же метод, что и выше, перед тем как заполнить таблицу с помощью устройств.

Спросите меня, если я не ясно, или если вам нужна дополнительная помощь

EDIT 1:

Вы можете найти способ очистить массив двойников на этот пост: The best way to remove duplicate values from NSMutableArray in Objective-C?

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

+0

Хорошо, но как я очищаю массив? –

+0

Вы ищете код или концепцию? Я бы назвал цикл и сравнил каждый объект с любым другим объектом. Если они совпадают (с любым уникальным идентификатором, который вы можете получить), удалите одного из близнецов. –

+0

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

0

Если вы можете сохранить ваши значения в NSSet (есть также Mutable Variant), то наборы уникальны тем, что они не позволяют дублировать. Имейте в виду, что NSSet неупорядочен, поэтому есть и вариант NSOrderedSet. Поиграйте с наборами, я думаю, что они будут хорошо подходить к вашей цели, и они могут быть всегда преобразованы обратно в массив, как только вы избавитесь от обманов.

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