如何从UITableView中过滤重复的数据

时间:2014-09-15 14:10:36

标签: c# ios uitableview xamarin bluetooth-lowenergy

我的应用扫描蓝牙设备并显示在表格中。但是,有时它会扫描同一台设备两次或多次,并在表格中多次显示相同的设备。

我需要过滤它。当重复设备的名称或UUID时,表格将只显示一次。

编辑: 这是我尝试过的,但不起作用......

            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());
        }

3 个答案:

答案 0 :(得分:0)

在浏览区域中的设备时,将每个设备存储在阵列中。

然后你可以

  • 清理双打数组并使用它来填充tableview
  • 将数组中的每个对象添加到tableview中,并检查您添加到tableview的内容是否已存在于数组中。

或者,如果可以,只需存储他们的UDID或您可以在字典中使用的任何唯一代码,并在使用设备填充tableview之前使用与上面相同的技术。

问我是否不清楚或是否需要更多帮助

编辑1:

你可以在这篇文章中找到一种清理双打数组的方法: The best way to remove duplicate values from NSMutableArray in Objective-C?

您还可以使用排序描述符对数组进行排序,然后将每个元素与下一个元素进行比较,并在必要时删除。您可以在互联网上轻松找到有关排序数组的信息,以及清理阵列。

答案 1 :(得分:0)

如果您可以将值存储在NSSet中(还有一个Mutable Variant),那么这些设置是唯一的,因为它们不允许重复。请注意,虽然NSSet是无序的,因此它也是该NSOrderedSet的变体。玩套装我觉得它们非常适合你的目的,一旦你摆脱了欺骗,它们总能被转换成阵列。

答案 2 :(得分:0)

假设您的数据为List<string>,则需要

一个。将新项目添加到列表中时检查重复项

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

湾事后

删除重复项
// requires System.Linq
var display_data = data.Distinct();