2017-07-27 49 views
-1

订单改变我有字典的阵列称为'arrAllCustomer'“的NSSet”在Objective-C

NSMutableArray *array = [NSMutableArray arrayWithArray:[[NSSet setWithArray:arrAllCustomer] allObjects]]; 

上面的行执行后,将阵列顺序被改变。

任何人都可以知道为什么订单更改?

+3

“有人知道为什么订单更改吗?” - 因为'NSSet'没有任何顺序。保留元素顺序的唯一容器'NSArray' –

+0

由于NSSet是无序的 – sasquatch

+0

为了维持顺序,您需要使用Array。 –

回答

2

NSSet不应保留订单。

Apple Doc

的NSSet中, 的NSMutableSet ,和 NSCountedSet 类声明的编程接口到无序集合对象。

如果要保留对象的顺序,与NSArray工作:

的NSArray和它的子类 的NSMutableArray 管理称为数组有序的对象集合。 NSArray创建静态数组,NSMutableArray创建动态数组。当需要对象的有序集合时,可以使用数组。

如果你想从数组中删除重复的对象,你可以自己写一个函数。取自here的一个示例:

extension Array where Element: Equatable { 
/// Array containing only _unique_ elements. 
var unique: [Element] { 
    var result: [Element] = [] 
    for element in self { 
     if !result.contains(element) { 
      result.append(element) 
     } 
    } 

    return result 
} 
} 
+0

如果我有重复记录,我该怎么办? –

+0

您可以删除维护订单的重复记录 – sasquatch