【问题标题】:NSMutableDictionary of NSMutableSets... sorting this outNSMutableSets 的 NSMutableDictionary... 整理出来
【发布时间】:2010-03-17 07:43:26
【问题描述】:

我有一个 NSMutableSets 的 NSMutableDictionary。

每个集合条目都是一个字符串,如下所示:

NSMutableSet *mySet = [NSMutableSet setWithObjects: 
  [NSString stringWithFormat:@"%f", time1],
  [NSString stringWithFormat:@"%f", time2],
  [NSString stringWithFormat:@"%f", time3], 
  nil];
// time 1,2,3, are  NSTimeInterval variables

然后我使用这个将每个集合存储在字典中:

NSString *rightNowString = [NSString stringWithFormat:@"%f", rightNow];
[myDict setValue:mySet forKey:rightNow];
// rightNow is NSTimeInterval
// myDict is a NSMutableDictionary

由于 rightNow 键可能出现乱序,因此我以未按 rightNow 排序的 NSDictionary 结尾。

考虑到它们是以字符串形式存储在字典中的数字,我如何按其键对 NSDictionary 进行排序...?

我不在乎排序集合,只关心字典。

感谢您的帮助。

【问题讨论】:

标签: iphone cocoa iphone-sdk-3.0


【解决方案1】:
  1. 如果值为 NSTimeInterval,则使用%f 或%g 等代替%d。 NSTimeInterval 是 double。
  2. 您不能对 NSDictionary 或 NSSet 中的对象进行排序。如果需要持久化顺序,则必须使用 NSArray,或者切换到 Objective-C++ 并使用 std::map。

【讨论】:

  • 1) 谢谢,当我将代码转移到这里时,这是一个错字... 2) 我可以将字典条目复制到数组中,排序并复制回来吗?怎么样?
  • @Mike:是的,您可以在数组中排序,但是当将它们复制回字典时,顺序将再次混乱。字典总是无序的。你必须坚持使用 NSArray。
  • 或者,比将时间间隔存储为字符串(假设您没有具体理由这样做)更好,将它们存储为数字。您可以并且应该在显示时使用 NSNumberFormatter 将它们转换为字符串。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多