Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/95.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何将NSMutableArray与NSMutableDictionary结合使用_Ios_Nsmutablearray_Nsmutabledictionary - Fatal编程技术网

Ios 如何将NSMutableArray与NSMutableDictionary结合使用

Ios 如何将NSMutableArray与NSMutableDictionary结合使用,ios,nsmutablearray,nsmutabledictionary,Ios,Nsmutablearray,Nsmutabledictionary,我有一本网站词典 [dictionaryOfSites setObject:@"http://www.example.com" forKey:@"Example.com"]; [dictionaryOfSites setObject:@"http://www.site1.com" forKey:@"Site1"]; [dictionaryOfSites setObject:@"http://www.apple.com" forKey:@"Apple"]; 我知道你不会给字典分类。但我读到有人使

我有一本网站词典

[dictionaryOfSites setObject:@"http://www.example.com" forKey:@"Example.com"];
[dictionaryOfSites setObject:@"http://www.site1.com" forKey:@"Site1"];
[dictionaryOfSites setObject:@"http://www.apple.com" forKey:@"Apple"];
我知道你不会给字典分类。但我读到有人使用NSMutableArray作为键,并且数组可以排序

所以如果我设置了一个新的数组

[[arrayKey alloc] initWithObjects:@"Example.com", @"Site1", @"Apple", nil];
然后,我会将我的第一个代码段修改为

[dictionaryOfSites setObject:@"http://www.example.com" forKey:[arrayForKey objectAtIndex:0]];
[dictionaryOfSites setObject:@"http://www.site1.com" forKey:[arrayForKey objectAtIndex:1]];
[dictionaryOfSites setObject:@"http://www.apple.com" forKey:[arrayForKey objectAtIndex:2]];
在这个简单的问题中,我有3个站点,所以我“硬”编码了它。如果我的网站列表是100个,我将如何做同样的事情?如何维持场地的秩序

如果我对数组排序 [arrayKey sortUsingSelector:@selector(localizedCaseInsensitiveCompare:)]


索引2不会变成索引0吗?如果变为索引0,则可以看到dictionaryOfSites的URL标签错误。

您需要做的是将NSDictionary对象存储在数组中,然后访问该数组中的值以进行排序(如果需要)。实际上,您并没有为排序存储新字符串。您只需在数组的索引处检查字典中某个键的值


是一个很好的字典数组排序源

您需要做的是将NSDictionary对象存储在数组中,然后访问该数组中的值以进行排序(如果需要)。实际上,您并没有为排序存储新字符串。您只需在数组的索引处检查字典中某个键的值


是一个很好的字典数组排序源

,因此您可以使用自定义类(正如我在上面的评论中提到的),或者更好地使用
NSDictionary
来存储MarkM建议的值


编辑:“我不必维护字典。这是一个全新的应用程序。”

2013-05-07 18:19:08.386 Testing App[75712:11f03] (
        {
        Name = Apple;
        URL = "http://www.apple.com";
    },
        {
        Name = "Example.com";
        URL = "http://www.example.com";
    },
        {
        Name = Site1;
        URL = "http://www.site1.com";
    } )
因为您不需要像您发布的那样从一个大字典开始,所以最好只将每个站点的单个字典对象存储在一个数组中,而不必担心转换

// Setup the initial array
NSMutableArray *arrayOfSites = [NSMutableArray new];
[arrayOfSites addObject:@{@"Name" : @"Example.com",
                          @"URL"  : @"http://www.example.com"}];
[arrayOfSites addObject:@{@"Name" : @"Site1",
                          @"URL"  : @"http://www.site1.com"}];
[arrayOfSites addObject:@{@"Name" : @"Apple",
                          @"URL"  : @"http://www.apple.com"}];

// At this point, arrayOfSites contains a dictionary object for each site.
// Each dictionary contains two keys:  Name and URL with the appropriate objects.
// Now we just need to sort the array by the Name key in the dictionaries:
NSSortDescriptor *descriptor = [[NSSortDescriptor alloc] initWithKey:@"Name"  ascending:YES];
[arrayOfSites sortUsingDescriptors:[NSArray arrayWithObjects:descriptor, nil]];

NSLog(@"%@", arrayOfSites);
结果:

2013-05-07 18:19:08.386 Testing App[75712:11f03] (
        {
        Name = Apple;
        URL = "http://www.apple.com";
    },
        {
        Name = "Example.com";
        URL = "http://www.example.com";
    },
        {
        Name = Site1;
        URL = "http://www.site1.com";
    } )
要访问数据,您可以使用:

NSString *name = [[arrayOfSites objectAtIndex:indexPath.row] objectForKey:@"Name"];

请注意,arrayOfSites应该是类的声明属性,以便您可以从不同的方法访问它。

因此您可以使用自定义类(如我在上面的评论中所述),或者更好地使用
NSDictionary
按MarkM建议存储值


编辑:“我不必维护字典。这是一个全新的应用程序。”

2013-05-07 18:19:08.386 Testing App[75712:11f03] (
        {
        Name = Apple;
        URL = "http://www.apple.com";
    },
        {
        Name = "Example.com";
        URL = "http://www.example.com";
    },
        {
        Name = Site1;
        URL = "http://www.site1.com";
    } )
因为您不需要像您发布的那样从一个大字典开始,所以最好只将每个站点的单个字典对象存储在一个数组中,而不必担心转换

// Setup the initial array
NSMutableArray *arrayOfSites = [NSMutableArray new];
[arrayOfSites addObject:@{@"Name" : @"Example.com",
                          @"URL"  : @"http://www.example.com"}];
[arrayOfSites addObject:@{@"Name" : @"Site1",
                          @"URL"  : @"http://www.site1.com"}];
[arrayOfSites addObject:@{@"Name" : @"Apple",
                          @"URL"  : @"http://www.apple.com"}];

// At this point, arrayOfSites contains a dictionary object for each site.
// Each dictionary contains two keys:  Name and URL with the appropriate objects.
// Now we just need to sort the array by the Name key in the dictionaries:
NSSortDescriptor *descriptor = [[NSSortDescriptor alloc] initWithKey:@"Name"  ascending:YES];
[arrayOfSites sortUsingDescriptors:[NSArray arrayWithObjects:descriptor, nil]];

NSLog(@"%@", arrayOfSites);
结果:

2013-05-07 18:19:08.386 Testing App[75712:11f03] (
        {
        Name = Apple;
        URL = "http://www.apple.com";
    },
        {
        Name = "Example.com";
        URL = "http://www.example.com";
    },
        {
        Name = Site1;
        URL = "http://www.site1.com";
    } )
要访问数据,您可以使用:

NSString *name = [[arrayOfSites objectAtIndex:indexPath.row] objectForKey:@"Name"];

请注意,arrayOfSites应该是类的声明属性,以便您可以从不同的方法访问它。

最好的方法是创建一个表示站点的自定义类,并包括两个属性:例如名称和URL。然后创建类的实例,设置两个属性,并将其放入数组中。然后,您可以根据对象的name属性对数组进行排序。将您的注释作为解决方案发布,以便获得信任。你能给我举个你指的例子吗。我对这个CocoaN00b很困惑,我通常会,但我要出门了,几个小时内不会再上网了。我只是想把这篇文章作为一个快速的评论来帮你指出正确的方向。这个网站(或应该)更多的是帮助人们,而不是“获得信用”。如果我回来后你仍然需要帮助,我会为你发布一个更完整的例子,但是使用我之前评论中的信息,你应该能够在这里和谷歌上搜索到这样做的好例子。祝你好运所以主要的问题是:知道你的字典没有维护排序顺序,你能在一开始就把它改成其他的东西吗,或者你一直在用它,只需要一种方法将数据复制到排序数组中吗?最好的方法是创建一个表示你的站点的自定义类,它包括两个属性:Name,例如URL。然后创建类的实例,设置两个属性,并将其放入数组中。然后,您可以根据对象的name属性对数组进行排序。将您的注释作为解决方案发布,以便获得信任。你能给我举个你指的例子吗。我对这个CocoaN00b很困惑,我通常会,但我要出门了,几个小时内不会再上网了。我只是想把这篇文章作为一个快速的评论来帮你指出正确的方向。这个网站(或应该)更多的是帮助人们,而不是“获得信用”。如果我回来后你仍然需要帮助,我会为你发布一个更完整的例子,但是使用我之前评论中的信息,你应该能够在这里和谷歌上搜索到这样做的好例子。祝你好运所以主要的问题是:知道你的字典没有维护排序顺序,你能在一开始就把它改成其他的东西吗,还是你一直在用它,只需要一种方法将数据复制到一个排序的数组中?我想你的意思是为每个站点创建一个
NSDictionary
对象,并将它们存储在数组中(只是为了帮助提问者澄清)。正确。您可以检查数组中dict的值以查找要进行排序的名称。我认为您的意思是为每个站点创建一个
NSDictionary
对象,并将每个对象存储在数组中(只是为了帮助提问者澄清)。正确。您可以检查数组中dict的值以查找要进行排序的名称。我不必维护字典。这是一个全新的应用程序。NSMutableDictionary之间有什么区别?我以为NSMutableDictionary允许我添加/删除对象。而NSDictionary不能更改我遵循了您的建议E