NSDate 作为 NSDictionary 的键

发布于 2024-12-25 16:16:21 字数 1280 浏览 2 评论 0原文

是否可以将 NSDate 添加为键,将一些数组添加为 NSDictionary 中的值?

我没有任何将字典写入磁盘的要求 - 存档或取消存档,就像这个人需要它一样: NSDictionary 以 NSDates 作为键

但是,为什么我希望将 NSDate 添加为键,这样我就可以从字典中获取所有键并进行一些计算,例如获取日期从一个范围内。

具有相同日期值的两个对象在创建时是否共享相同的内存?

是否可以将 NSDate 作为密钥?另外,这个假设我可能会面临哪些其他问题?

谢谢,

拉吉

编辑: 发布我的问题后,我只是编写了一个示例代码:

NSDateComponents *dateComps = [[NSDateComponents alloc] init];
[dateComps setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];
[dateComps setDay:1];
[dateComps setMonth:1];
[dateComps setYear:2012];
NSDate *date1 = [[NSCalendar currentCalendar] dateFromComponents:dateComps];
NSDate *date2 = [[NSCalendar currentCalendar] dateFromComponents:dateComps];
NSLog(@"Date 1 = %x, Date 2 = %x", date1, date2);

输出:

Date 1 = 7945610, Date 2 = bd03610

但是 NSDictionary 的关键比较是否将这 2 个 NSDate 对象解释为不同的?

另一个编辑:

另外,如果我应该使用 NSDateFormatter 将 NSDate 转换为 NSString,我无法直接检查范围内的日期。我必须执行以下步骤:

  1. 从字典中获取所有 NSString 键数组
  2. 将它们转换回 NSDate 数组
  3. 执行谓词并获取范围内的日期
  4. 再次将这些日期转换回字符串数组
  5. 现在使用此字符串键从中获取值字典!

那么,有没有更好的办法呢?

Is it possible to add NSDate as keys and some arrays as it values in a NSDictionary?

I dont have any requirement of writing the dictionary to disk - archiving or unarchiving, just as this guy needs it: NSDictionary with NSDates as keys

But, why I want NSDate to be added as keys specifically is so that I can fetch all keys from the dictionary and do some computations like, fetching the dates from within a range.

Whether two objects with same date value share same memory when created?

Is it possible to have NSDate as key? Also, what other problems I might face with this assumption?

Thanks,

Raj

Edit:
After posting my question, I just wrote a sample code:

NSDateComponents *dateComps = [[NSDateComponents alloc] init];
[dateComps setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];
[dateComps setDay:1];
[dateComps setMonth:1];
[dateComps setYear:2012];
NSDate *date1 = [[NSCalendar currentCalendar] dateFromComponents:dateComps];
NSDate *date2 = [[NSCalendar currentCalendar] dateFromComponents:dateComps];
NSLog(@"Date 1 = %x, Date 2 = %x", date1, date2);

Output:

Date 1 = 7945610, Date 2 = bd03610

But does the key comparison of NSDictionary interpret these 2 NSDate objects as different?

Another Edit:

Also, if I should convert NSDate to NSString using NSDateFormatter, I cannot directly check for dates within range. I will have to perform the following steps:

  1. Get all NSString array of keys from dictionary
  2. Convert them back to array of NSDate
  3. Perform predicates and fetch dates within range
  4. Again convert back those dates to an array of Strings
  5. Now use this string keys to get values from dictionary!

So, is there any better way?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

凉墨 2025-01-01 16:16:21

是的,NSDate 对象可以用作 NSDictionary 的键 - 任何对象类型都可以用作键,只要它支持 NSCopying 协议。键通过指针值使用 isEqual:not 进行比较。有关更多详细信息,请参阅 NSDictionary 文档的概述部分。

Yes, NSDate objects can be used as keys for NSDictionary - any object type can be used as a key provided it supports the NSCopying protocol. Keys are compared using isEqual: and not by pointer value. See the Overview section of the NSDictionary documentation for more details.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文