如何对包含NSString的NSMutableSet进行Objective-C排序?

5

可能是重复问题:
什么是排序NSSet的最有效方法?

我目前有一个NSMutableSet,其中包含以下字符串列表。例如:{@"c",@"d",@"e",@"f",@"g",@"a"}

请问如何按字母顺序对这些值进行排序?是否可以使用sortedArrayUsingDescriptors:来实现这一点?


1
https://dev59.com/tnM_5IYBdhLWcg3wgjW2 - David V
1
上述帖子中的选择器可在NSSet上使用。请注意,它将不再是一个集合。数组是有序的,而集合则不是。 - David V
我认为这不是那个问题的重复。具体来说,那个更一般的问题在如何在这种特殊情况下创建描述符方面没有提供任何帮助,而且它并不像看起来那么明显,因为你首先想到的是,“但我不想基于对象上的键进行排序;我想基于对象本身进行排序”。当然,答案是“self”键为您提供了这个功能,但对于那些不熟悉键值编码的人来说,这并不是特别明显。 :-) - dgatwood
3个回答

15

当然,你可以使用那个方法:

NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey:@"description" ascending:YES];
NSArray *sortedArray = [mySet sortedArrayUsingDescriptors:[NSArray arrayWithObject:sort]];

这只是创建了一个新的排序描述符,指定了键“description”(NSString提供了一个-description方法,返回字符串)。然后它将包含该排序描述符的数组作为参数传递给-sortedArrayUsingDescriptors:,你可以将其发送到任何NSSet。


如果你将"self"作为键传递,你会得到相同的结果。我认为通过请求描述键,你实际上是在做额外的工作。具体来说,我认为它通过调用所请求键的值的描述方法来获取用于排序的值,因此你实际上是在获取描述的描述。 - dgatwood
@dgatwood 你比我快。我刚写了一些代码来对NSString数组进行排序,并决定将@"self"作为键。来这里看看是否有其他选择。 - pnizzle
@dgatwood 你说得没错,但使用 description 更加健壮,因为它即使在数组包含非字符串对象的情况下也能正常工作。这是否真的是可取的,这是一个观点问题,因为 OP 确实指定了对象是字符串,但同时额外的工作量微不足道。 - Caleb

1
我假设这个问题Sorting NSSet就是你的问题的答案。如果不方便点击链接...
[mySet sortedArrayUsingDescriptors:descriptors];

-2

NSSets是无序集合。如果您需要一个有序的容器,请使用NSArray。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接