将下载的数据放入字典的最佳方法

时间:2012-03-08 17:35:59

标签: iphone objective-c ios cocoa-touch

这是我清理后的数据:

| 3.9|JG0058|. 1|88/ADJUSTED|N384721......|W0982403......|C...|A 295
| 3.3|JG0713|2 .|29/VERT ANG|N384357.45928|W0982552.48655|....|ASTRO STAKE TEMPORARY
| 1.4|JG0054|. 1|88/ADJUSTED|N384459......|W0982059......|C...|B 295
| 4.4|JG0059|. 1|88/ADJUSTED|N384749......|W0982403......|B...|BB 190
| 1.5|JG0055|. 1|88/ADJUSTED|N384530......|W0982142......|B...|BLACK WOLF
| 2.0|JG0700|3 3|29/LEVELING|N384358.55373|W0982006.77896|....|BLACK WOLF
| 2.6|JG0052|. 1|88/ADJUSTED|N384438......|W0981921......|D...|C 295
| 2.3|JG0053|. 1|88/ADJUSTED|N384446......|W0981949......|B...|CC 190
| 4.6|JG0050|. 1|88/ADJUSTED|N384427......|W0981706......|C...|D 295
| 3.6|JG0051|. 1|88/ADJUSTED|N384430......|W0981817......|B...|DD 190
| 3.3|JG0712|1 .|29/VERT ANG|N384356.81442|W0982552.34585|....|JANDA
| 4.6|JG0711|2 .|29/SCALED..|N384053.85600|W0982456.07875|....|PROGRESS
| 4.9|JG0009|. 2|88/ADJUSTED|N384240......|W0981712......|C...|S 197
| 2.0|JG0056|. 1|88/ADJUSTED|N384555......|W0982251......|C...|Y 294
| 2.9|JG0057|. 1|88/ADJUSTED|N384636......|W0982335......|C...|Z 294

我想将单独的行放入具有以下键和类型的字典中:

[@"blank",@"Dist", @"PID", @"Horiz", @"Vert", @"Vert_Source", @"Latitude", @"Longitude", @"Stability", @"Designation", nil];

[[NSString string],float, int, int,int, [NSString string], double, double, [NSString string], [NSString string], nil];

我似乎无法找到最好的方法来做到这一点而且我正在用所有选项撞到墙上。如果可以的话请帮忙。也许是用于将字符串读入字典或数组的代码片段。顺便说一下,数据当前作为可变数组中的单个字符串。我的意图是使用这些数据填充单元格并最终映射位置。

非常感谢任何帮助。搜索数据通常为1到2秒,并且永远不会超过30行。

每行有8个项目,包括我需要的空白,每行开始。每隔一个键由|分隔除了水平/垂直之外,它们之间没有任何东西,但是通过d或句点表示的字母。该列从第三列开始。我希望网站数据是一致的,但至少索引号不会在行中发生变化。

4 个答案:

答案 0 :(得分:1)

您可以像这样分隔每个字符串:

NSArray *values = [string componentsSeparatedByString:@"|"];

然后你可以像这样为那个字符串创建字典:

NSDictionary *dictionary = [NSDictionary dictionaryWithObjects:values forKeys:keys];

其中keys是这样定义的数组:

NSArray *keys = [NSArray arrayWithObjects:@"blank",@"Dist", @"PID", @"Horiz", @"Vert", @"Vert_Source", @"Latitude", @"Longitude", @"Stability", @"Designation", nil];

所以你的代码看起来像这样:

NSArray *keys = [NSArray arrayWithObjects:@"blank",@"Dist", @"PID", @"Horiz", @"Vert", @"Vert_Source", @"Latitude", @"Longitude", @"Stability", @"Designation", nil];
for (NSString *line in lines) {
    NSArray *values = [line componentsSeparatedByString:@"|"];
    NSDictionary *dictionary = [NSDictionary dictionaryWithObjects:values forKeys:keys];
    // ...
}

答案 1 :(得分:0)

如果您的数据是NSString

,则可以执行此操作
NSArray *array = [data componentsSeparatedByString:@"|"];

然后遍历数据并将其放在字典中。

答案 2 :(得分:0)

NSArray* components = [string componentsSeparatedByString:@"|"];
    blank = [components objectAtIndex:0];
    dist = [components objectAtIndex:1];
    PID = [components objectAtIndex:2];
    horiz = [components objectAtIndex:3];
        //...

将每个分开|,然后如果您对使用部分数组感兴趣,可以像这样设置它。如果你不想使用字典。

答案 3 :(得分:0)

您可以使用一个字典来表示这样的“记录” - (键,值)对 - 并将这些记录放在表示“表”的数组中。 componentsSeparatedByString:@ “|”将其分解为单个字段 - 适合加载记录(字典)并填充数组。