Make unique NSMutableArray or NSMutableSet

后端 未结 4 1897
挽巷
挽巷 2020-12-31 04:35

I\'m currently enumerating through NSMutableArray (or NSMutableSet) elements to find duplicates and remove them.

For example, if array/set

相关标签:
4条回答
  • 2020-12-31 05:05

    An NSSet does exactly what you're trying to do: it is a (unordered) collection of unique items. So, you can find the unique items in your array like so:

    NSSet *uniqueElements = [NSSet setWithArray:myArray];
    
    // iterate over the unique items
    for(id element in uniqueElements) {
      // do something
    }
    

    NSSet most likely uses a hash algorithm to make insertion O(1) (compared to O(n^2) to check if each item is unique by iteration), but the Apple documentation does not make such a guarantee so you probably shouldn't count on that implementation detail.

    If, for some reason you need to keep the unique items in a sorted (ordered) collection, you can turn the set back into an array with -[NSSet allObjects] and then sort the resulting array.

    0 讨论(0)
  • 2020-12-31 05:19

    An NSSet or NSMutableSet will guarantee that you don't have duplicate objects. It will work for NSStrings as in your example, but for your own classes keep in mind what do you mean by "equal" and implement the hash and isEqual: methods accordingly.

    0 讨论(0)
  • 2020-12-31 05:24

    A set never contains duplicate elements, so simply creating an NSMutableSet should guarantee uniqueness of values.

    0 讨论(0)
  • 2020-12-31 05:24

    Only this line of code will work fine .

    NSSet *mySet = [NSSet setWithArray:myArray];
    

    now mySet will have unique elements.

    0 讨论(0)
提交回复
热议问题