【问题标题】:'NSSet' Order change in Objective-C [duplicate]Objective-C中的“NSSet”顺序更改[重复]
【发布时间】:2017-07-27 09:38:15
【问题描述】:

我有一个名为 'arrAllCustomer' 的字典数组:

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

执行上述行后,数组顺序发生了变化。

谁能知道为什么顺序会改变?

【问题讨论】:

  • "有谁知道为什么订单发生了变化?" - 因为NSSet 没有任何订单。唯一保留NSArray中元素顺序的容器
  • 因为 NSSet 是无序的
  • 为了维护你需要使用数组的顺序。
  • 但是每次最后一个对象移动到第一个位置时,也是如此。为什么会发生这种情况?
  • 没有人可以预测NSSet中的顺序,所以你不能一直依赖最后一个对象到第一个位置

标签: ios objective-c nsset


【解决方案1】:

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
}
}

【讨论】:

  • 有重复记录怎么办?
  • 您可以删除维护订单的重复记录
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-18
  • 1970-01-01
  • 2020-12-29
  • 2021-08-19
相关资源
最近更新 更多