我的应用扫描蓝牙设备并显示在表格中。但是,有时它会扫描同一台设备两次或多次,并在表格中多次显示相同的设备。
我需要过滤它。当重复设备的名称或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());
}
答案 0 :(得分:0)
在浏览区域中的设备时,将每个设备存储在阵列中。
然后你可以
或者,如果可以,只需存储他们的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();