【问题标题】:NSMutableDictionary key value shuffledNSMutableDictionary 键值洗牌
【发布时间】:2015-01-23 02:38:02
【问题描述】:

我在 NSMutableDictionary 中遇到了非常奇怪的问题。请看下面的代码。

 NSMutableDictionary *dict=[[NSMutableDictionary alloc]init];
 [dict setValue:@"India" forKey:(@"Title")];
 [dict setValue:@"Done" forKey:(@"Status")];

当我打印这个字典对象时,它显示如下。

{
Status =Done,
Title=India;
}

这个键被洗牌了,实际上标题键应该排在第一位。

那么,我该如何解决这个问题。

【问题讨论】:

  • 据我所知,没有订购字典。如果您需要订购,请使用 NSArray。
  • 为什么需要订购?顺便说一句,这不是问题。

标签: ios iphone key-value nsmutabledictionary


【解决方案1】:

这不是问题。

NSDictionary 你理解有误或者你弄错了。 NSDictionary 是一个基于键存储值的容器。

因此,不需要任何顺序或索引。

背后的原因是只有知道密钥才能访问容器值。因此,检查这些键的顺序意义不大。因为您必须如何使用该键来访问相关值。

现在关于订单 - 使用 NSArray 代替,更多使用 NSArrayNSDictionary 的对象。这样你就有了字典支持的订单。

仍然排序字典键的方法如下:

NSMutableDictionary *dict=[[NSMutableDictionary alloc]init];
[dict setValue:@"India" forKey:(@"Title")];
[dict setValue:@"Done" forKey:(@"Status")];

NSArray *keys = [dict allKeys];
keys = [keys sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)];

NSLog(@"%@",keys);

【讨论】:

    【解决方案2】:

    NSDictionary 或 NSMutableDictionary 不保证其键/值对的任何顺序。没有办法将您的键/值保持在一个固定的顺序中,并且 NSDictionary 或 NSMutableDictionary 像这样工作是没有意义的。 (您使用键而不是索引来检索值)。

    如果您希望您的值或键按特定顺序显示,您可以在检索它们后对其进行排序:

    NSArray * sortedKeys = [ [ myDictionary allKeys ] sortedArrayUsingSelector:... ] ;
    

    NSArray * sortedKeys = [ [ myDictionary allKeys ] sortedArrayUsingComparator:... ] ;
    

    然后,如果需要,您可以检索已排序键的关联对象。

    另一种选择是维护 2 个单独的数组,一个用于键,一个用于值,并保持它们的顺序。

    【讨论】:

      猜你喜欢
      • 2011-05-05
      • 1970-01-01
      • 2021-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-26
      • 1970-01-01
      相关资源
      最近更新 更多