美文网首页
iOS官方文档 Foundation篇---NSHashTabl

iOS官方文档 Foundation篇---NSHashTabl

作者: qianfei | 来源:发表于2019-05-24 17:30 被阅读0次

    NSHashTable

    类似于集合的集合,但具有更广泛的可用内存语义。继承自NSObject;NSHashTable具有以下特点:

    • 它是内容可变的;
    • 可以容纳对其成员的弱引用;
    • 成员可以在输入上复制,也可以使用指针标识进行相等和散列;
    • 可以包含任意指针(其成员不限于作为对象);
    创建
    // 根据选项创建哈希表
    NSHashTable *hashTable = [[NSHashTable alloc]initWithOptions:NSPointerFunctionsStrongMemory capacity:5];
    
    NSPointerFunctions *functions = [[NSPointerFunctions alloc]initWithOptions:NSPointerFunctionsStrongMemory];
    // 根据方法创建哈希表
    NSHashTable *hashTable1 = [[NSHashTable alloc]initWithPointerFunctions:functions capacity:5];
    
    // 创建存储弱引用内容的哈希表
    NSHashTable *hashTable2 = [NSHashTable weakObjectsHashTable];
    
    // 创建指定指针函数选项的哈希表
    NSHashTable *hashTable3 = [NSHashTable hashTableWithOptions:NSPointerFunctionsStrongMemory];
    
    访问内容
    NSHashTable *hashTable = [[NSHashTable alloc]initWithOptions:NSPointerFunctionsStrongMemory capacity:5];
    [hashTable addObject:@"1"];
    [hashTable addObject:@"2"];
    [hashTable addObject:@"3"];
    
    // 获取哈希表中的一个对象
    NSString *anyObj = [hashTable anyObject];//1
    
    // 获取哈希表中全部对象
    NSArray *objArr = [hashTable allObjects];//(1,2,3)
    
    // 包含哈希表元素的集合
    NSSet *set = [hashTable setRepresentation];//{(1,3,2)}
    
    // 获取哈希表中的元素数量
    NSUInteger count = [hashTable count];//3
    
    // 判断哈希表中是否包含指定元素
    BOOL isCon = [hashTable containsObject:@"1"];//YES
    
    // 确定哈希表是否包含给定对象,并返回该对象(如果存在)
    NSString *obj = [hashTable member:@"1"];//1
    
    // 根据枚举器遍历哈希表元素
    NSEnumerator *enumerator = [hashTable objectEnumerator];
    id object;
    while (object = [enumerator nextObject]) {
        NSLog(@"开始打印:%@\n",object);
        /*
        开始打印:1
        开始打印:3
        开始打印:2
         */
    }
    
    访问内容
    NSHashTable *hashTable = [[NSHashTable alloc]initWithOptions:NSPointerFunctionsStrongMemory capacity:5];
    
    // 将指定对象添加到哈希表
    [hashTable addObject:@"1"];
    
    // 从哈希表中移除指定元素
    [hashTable removeObject:@"1"];
    
    // 从哈希表中删除所有元素
    [hashTable removeAllObjects];
    
    比较哈希表
    NSHashTable *hashTable = [[NSHashTable alloc]initWithOptions:NSPointerFunctionsStrongMemory capacity:5];
    [hashTable addObject:@"1"];
    [hashTable addObject:@"2"];
    [hashTable addObject:@"3"];
    [hashTable addObject:@"4"];
    [hashTable addObject:@"5"];
    
    NSHashTable *hashTable1 = [[NSHashTable alloc]initWithOptions:NSPointerFunctionsStrongMemory capacity:5];
    [hashTable1 addObject:@"3"];
    [hashTable1 addObject:@"4"];
    [hashTable1 addObject:@"5"];
    [hashTable1 addObject:@"6"];
    [hashTable1 addObject:@"7"];
    
    // 给定的哈希表是否与接收哈希表相交
    BOOL isIn = [hashTable intersectsHashTable:hashTable1];//YES
    
    // 接收哈希表中的每个元素是否也存在于另一个给定哈希表中。
    BOOL isSub = [hashTable isSubsetOfHashTable:hashTable1];//NO
    
    // 指示给定的哈希表是否等于接收哈希表。
    BOOL isEq = [hashTable isEqualToHashTable:hashTable1];//NO
    
    // 从接收哈希表中删除另一个给定哈希表中的每个元素(如果存在)
    [hashTable minusHashTable:hashTable1];//(1,2)
    
    // 将另一个给定哈希表中的每个元素添加到接收哈希表(如果不存在)。
    [hashTable unionHashTable:hashTable1];//(1,6,2,5,7,3,4)
    
    // 从接收哈希表中删除不是另一个给定哈希表的成员的每个元素。
    [hashTable intersectHashTable:hashTable1];//(6,5,7,3,4)
    
    欢迎留言指正,会持续更新。。。

    相关文章

      网友评论

          本文标题:iOS官方文档 Foundation篇---NSHashTabl

          本文链接:https://www.haomeiwen.com/subject/dgfnzqtx.html