代码之家  ›  专栏  ›  技术社区  ›  suse

在iPhone编码中,如何将字符串的值添加到哈希表中?

  •  -1
  • suse  · 技术社区  · 16 年前
    for(NSString *s in mainarr)
     {
        NSString newseparator = @"="; 
        NSArray *subarray = [s componentsSeparatedByString : newseparator]; 
    
      //Copying the elements of array into key and object string variables 
    
        NSString *key = [subarray objectAtIndex:0]; 
        NSLog(@"%@",key); 
        NSString *class_name= [subarray objectAtIndex:1]; 
        NSLog(@"%@",class_name); 
    
      //Putting the key and objects values into hashtable  
        NSDictionary *dict= [NSDictionary dictinaryWithObject:@"class_name" forKey:@"key"];
     }    
    

    你好。。在上面的代码中,我必须在for循环中解析数组的元素,然后必须将子字符串键和类名放入哈希表中。如何将这些字符串变量的值放入哈希表中。 在上面的代码中,我猜变量class_name和key是放在hashtable中的,而不是值。我想这是个错误的方法。如何才能实现解决方案?

    1 回复  |  直到 16 年前
        1
  •  2
  •   kennytm    16 年前

    (1)你应该写

     NSString* newseparator = @"=";
    

    尽管直接使用

     NSArray *subarray = [s componentsSeparatedByString:@"="]; 
    

    好多了 newseparator 一个全局常数)。


    (2)你最后的陈述,

        NSMutableDictionary = [NSDictionary dictinaryWithObject:@"class_name" forKey:@"key"];
    

    无效,因为(a) NSMutableDictionary 是一个类型;(b)您正在创建字典,而不是可变字典;(c)您每次都在创建它,并覆盖以前的字典;(d)您正在使用常量值创建字典。 @"class_name" 和钥匙 @"key" ,与实际变量不对应 class_name key .

    要将键值对添加到1个哈希表中,应在开头创建可变字典。

    NSMutableDictionary* dict = [NSMutableDictionary dictionary];
    

    然后在循环中,使用 -setObject:forKey: 要将其添加到字典中,请执行以下操作:

    [dict setObject:class_name forKey:key];
    

    最后,您应该将代码修改为

    NSMutableDictionary* dict = [NSMutableDictionary dictionary];
    for(NSString *s in mainarr) {
        NSArray *subarray = [s componentsSeparatedByString:@"="]; 
    
        // Get the elements of array into key and object string variables 
        NSString *key = [subarray objectAtIndex:0]; 
        NSLog(@"%@",key); 
        NSString *class_name= [subarray objectAtIndex:1]; 
        NSLog(@"%@",class_name); 
    
        //Putting the key and objects values into hashtable  
        [dict setObject:class_name forKey:key];
    }    
    return dict;