Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/37.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
Iphone 算法:Cocoa Touch中的数组(可能使用NSCountedSet)_Iphone_Objective C_Cocoa_Cocoa Touch_Algorithm - Fatal编程技术网

Iphone 算法:Cocoa Touch中的数组(可能使用NSCountedSet)

Iphone 算法:Cocoa Touch中的数组(可能使用NSCountedSet),iphone,objective-c,cocoa,cocoa-touch,algorithm,Iphone,Objective C,Cocoa,Cocoa Touch,Algorithm,就解释而言,这一条有点乏味,所以就这样说吧。我实际上是在iPhone上用多个部分填充tableView,每个部分可能有多行。据我所知,最好有一个数组数组,这样您就可以通过向count的顶级数组发送消息来确定一个数组有多少个节,然后对每个节的行,对内部数组执行相同的操作。我的数据是以字典的形式存在的。字典中的一个键/值对决定了它在tableView上的显示位置。一个例子如下: { name: "bob", location: 3 } { name: "jane", locatio

就解释而言,这一条有点乏味,所以就这样说吧。我实际上是在iPhone上用多个部分填充tableView,每个部分可能有多行。据我所知,最好有一个数组数组,这样您就可以通过向count的顶级数组发送消息来确定一个数组有多少个节,然后对每个节的行,对内部数组执行相同的操作。我的数据是以字典的形式存在的。字典中的一个键/值对决定了它在tableView上的显示位置。一个例子如下:

{
  name: "bob",
  location: 3
}
{ 
  name: "jane",
  location: 50
}
{
  name: "chris",
  location: 3
}
在这种情况下,我有一个带有两个子阵列的数组。第一个子数组将有两个包含bob和chris的字典,因为它们都是位置3的一部分。第二个子阵列将包含jane,因为她位于位置50。在这个数据结构中,我的最佳选择是什么?C中的哈希表可能会起作用,但我更愿意使用Cocoa中可用的类

谢谢,如果我需要进一步澄清,请告诉我。

NSDictionary是一个哈希表。

以下代码有效:(编辑:添加了我的初始化代码)


在Cocoa中,最好使用模型对象而不是原始集合,尤其是在使用绑定时。字典当然应该是模型对象,您可能还想将内部数组转换为模型对象。(外部阵列应保持为阵列。)

Cocoa Touch没有绑定,但我发现(在Cocoa中,因为我没有为iPhone编程),模型对象使事情更容易思考和处理。我还是建议您创建模型对象


(“模型”是指Cocoa的“模型-视图-控制器”模式,在该模式中,Cocoa提供视图和控制器对象,而您提供模型。)

Hey James,当前出现以下消息:由于未捕获的异常“NSInvalidArgumentException”终止应用程序,原因:'***-[NSCFDictionary setObject:forKey:]:尝试插入我现在添加到用于初始化arrayOfRecords的代码中的nil key'。这是为我编译和运行的。什么构成模型对象?一个自主开发的objective-c类,不依赖于“NS”领域中的任何东西?不,一个模型对象为用户的数据建模;它表示用户正在创建、编辑或以其他方式操作的内容。
NSArray * arrayOfRecords = [NSArray arrayWithObjects:

    [NSDictionary dictionaryWithObjectsAndKeys:
     @"bob", @"name",
      [NSNumber numberWithInt:3], @"location",  nil],

    [NSDictionary dictionaryWithObjectsAndKeys:
     @"jane", @"name",
      [NSNumber numberWithInt:50], @"location",  nil],

    [NSDictionary dictionaryWithObjectsAndKeys:
     @"chris", @"name",
      [NSNumber numberWithInt:3], @"location",  nil],

    nil];

NSMutableDictionary * sections = [NSMutableDictionary dictionary];

for (NSDictionary * record in arrayOfRecords)
{
    id key = [record valueForKey:@"location"];
    NSMutableArray * rows = [sections objectForKey:key];

    if (rows == nil)
    {
        [sections setObject:[NSMutableArray arrayWithObject:record] forKey:key];
    }
    else
    {
        [rows addObject:record];
    }
}

NSArray * sortedKeys = [[sections allKeys] sortedArrayUsingSelector:@selector(compare:)];
NSArray * sortedSections = [sections objectsForKeys:sortedKeys notFoundMarker:@""];

NSLog(@"%@", sortedSections);