Foundation框架 - NSSet类 、NSMutableSet类

NSSet和NSArray的对比

/*
 NSSet和NSArray的对比
 1> 共同点
 * 都是集合,都能存放多个OC对象
 * 只能存放OC对象,不能存放非OC对象类型(基本数据类型:int、char、float等,结构体,枚举)
 * 本身都不可变,都有一个可变的子类

 2> 不同点
 * NSArray有顺序,NSSet没有顺序
 */

重点内容

#import <Foundation/Foundation.h>
#import "Person.h"

static void ___log(NSSet* set1);
static void ___log(NSSet* set1)
{
    NSMutableString * str = [NSMutableString stringWithFormat:@"NSSet{"];

    for (id item in set1) {
        [str appendFormat:@"%@,",item];
    }
    //删除最后一个逗号
    NSRange rng ={str.length-1,1};
    [str deleteCharactersInRange:rng];
    [str appendString:@"}"];
    NSLog(@"%@",str);
}

演练set判断重复的依

#import <Foundation/Foundation.h>

@interface Person : NSObject

@property NSString* name;
@property NSNumber* age;

@property (nonatomic, strong) NSString * week;
+ (instancetype) personWithName:(NSString*) name withAge:(NSNumber*)age;
@end
#import "Person.h"

@implementation Person

@synthesize name,age;

+ (instancetype)personWithName:(NSString *)name withAge:(NSNumber *)age
{
    Person* person=[[Person alloc]init];
    person.name=name;
    person.age=age;
    return person;
}

/**
 *  重写hash方法
 */
- (NSUInteger) hash
{
    NSLog(@"访问了hash");
    NSDate* date=[NSDate new];
    return date.timeIntervalSinceReferenceDate;
}

/**
 *  重写isEqual方法
 */
- (BOOL)isEqual:(id)object
{
    return YES;
}
@end
int main(int argc, const char * argv[]) {
    @autoreleasepool {

     //演练set判断重复的依据
        Person* jobs=[Person personWithName:@"steven jobs" withAge:[NSNumber numberWithInt:56]];
        Person* cook=[Person personWithName:@"david cook" withAge:[NSNumber numberWithInt:54]];
        Person* cook2=[Person personWithName:@"david cook" withAge:[NSNumber numberWithInt:54]];

        NSSet* personSet =[NSSet setWithObjects:jobs,cook,cook2, nil];
        NSLog(@"personSet_count:%lu",personSet.count);

集合的创建

        NSLog(@"*************************** 集合的创建 **************************");

        NSSet *s1 = [NSSet setWithObjects:@"tom",@"rose", @"jack",@"lily",nil];
        NSString *str =  [s1 anyObject];// 随机拿出一个元素
        NSLog(@"随机取出的元素为:%@", str);

        //集合里只能存放OC对象,不能存放非OC对象类型
        NSSet* set=[NSSet setWithObjects:@"rose",@"jack",[NSNumber numberWithInt:4],nil];
        NSLog(@"set的长度为:%lu",[set count]);
        for (id item in set) {
            NSLog(@"item:%@",item);
        }

集合的遍历

        NSLog(@"*************************** 集合的遍历 **************************");

        NSArray* arr=[NSArray arrayWithObjects:@"中国",@"日本", @"朝鲜",@"韩国",nil];
        NSSet* set1=[NSSet setWithArray:arr];
        NSLog(@"%[email protected]",set1.className);

        NSArray* arr2=[set1 allObjects];
        for (NSString* item in arr2) {
            NSLog(@"%@",item);
        }

判断交集

        NSLog(@"**************************** 判断交集 ***************************");

        NSSet* intersect=[NSSet setWithObjects:@"中国",@"日本", nil];
        if ([set1 intersectsSet:intersect]) {
            NSLog(@"intersect是set1的交集");
        }

可变集合操作

NSLog(@"*************************** 可变集合操作 *************************");

        //从现有的set转换为MutableSet,获得一份可变集合的拷贝
        NSMutableSet* mset=[intersect mutableCopy];
        NSLog(@"mset:%@",mset.className);

        //添加对象
        [mset addObject:@"新加坡"];
        NSLog(@"添加对象后的集合为:%@",mset);

        //删除对象
        [mset removeObject:@"日本"];
        NSLog(@"删除对象后的集合为:%@",mset);

        //求并集
        [mset unionSet:set1];
        ___log(mset);
        NSLog(@"并集为:%@",mset);

        //求补集
        [mset minusSet:intersect];
        ___log(mset);
        NSLog(@"补集为:%@",mset);

        //求交集
        [mset intersectsSet:set1];
        ___log(mset);
        NSLog(@"交集为:%@",mset);

NSCountedSet

NSLog(@"*************************** NSCountedSet **************************");

        //计算字符串的重复次数  + (instancetype)orderedSet
        //The NSCountedSet class declares the programmatic interface to a mutable,
        //unordered collection of indistinct objects. A counted set is also known as a bag.
        NSString* [email protected]"abc abc 123 ab cd cd";
        NSArray* strArr=[sourStr componentsSeparatedByString:@" "];
        NSCountedSet* csset=[NSCountedSet setWithArray:strArr];
        NSUInteger count=[csset countForObject:@"abc"];
        NSLog(@"求得的abc的重复数为:%lu",count);
时间: 2024-10-18 05:33:19

Foundation框架 - NSSet类 、NSMutableSet类的相关文章

(转载)OC学习篇之---Foundation框架中的其他类(NSNumber,NSDate,NSExcetion)

前一篇说到了Foundation框架中的NSDirctionary类,这一一篇来看一下Foundation的其他常用的类:NSNumber,NSDate,NSException. 注:其实按照Java中集合的思想,应该还有一个Set,是的,OC中有NSSet和NSMutableSet这两个类的,但是,这里我为什么不单独介绍了呢?因为他的操作和NSArray是非常相似的,只是他和NSArray有一个区别就是他不能放重复数据,而且他也是无序的.其他没什么了,所以就不单独介绍了,而且NSSet在后面的

iOS Foundation 框架中 Mutable 的类们

太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS.Android.Html5.Arduino.pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作. Mutable 对于那些不能直接对其中内容进行更改的类来说,是一种扩展方式,象数值这类的,不涉及到指针的,就没有 Mutable 子类,可能是因为

OC学习篇之---Foundation框架中的NSDictionary类以及NSMutableDictionary类

今天来看一下Foundation框架中的NSDictionary类,NSMutableDictionary类,这个和Java中的Map类很想,OC中叫字典,Java中叫Map,还有字典是无序的,这个和NSArray不一样,Java中的Map也是无序的,通过hash值去检索元素的. 一.NSDictionary类 [objc] view plain copy // //  main.m //  19_NSDictionary // //  Created by jiangwei on 14-10-

OC学习篇之---Foundation框架中的NSDirctionary类以及NSMutableDirctionary类

昨天学习了Foundation框架中NSArray类和NSMutableArray类:http://blog.csdn.net/jiangwei0910410003/article/details/41809719,今天来看一下Foundation框架中的NSDirctionary类,NSMutableDirctionary类,这个和Java中的Map类很想,OC中叫字典,Java中叫Map,还有字典是无序的,这个和NSArray不一样,Java中的Map也是无序的,通过hash值去检索元素的.

OC学习篇之---Foundation框架中的NSArray类和NSMutableArray类

在之前的一篇文章中介绍了Foundation框架中的NSString类和NSMutableString类: http://blog.csdn.net/jiangwei0910410003/article/details/41788223 今天我们继续来看一下Foundation框架中的NSArray类和NSMutableArray类,其实NSArray类和Java中的List差不多,算是一种数据结构,当然我们从这两个类可以看到,NSArray类是不可变的,NSMutableArray类是可变的.

(转载)OC学习篇之---Foundation框架中的NSDirctionary类以及NSMutableDirctionary类

昨天学习了Foundation框架中NSArray类和NSMutableArray类,今天来看一下Foundation框架中的NSDirctionary类,NSMutableDirctionary类,这个和Java中的Map类很想,OC中叫字典,Java中叫Map,还有字典是无序的,这个和NSArray不一样,Java中的Map也是无序的,通过hash值去检索元素的. 一.NSDirctionary类 1 // 2 // main.m 3 // 19_NSDictionary 4 // 5 //

(转载)OC学习篇之---Foundation框架中的NSArray类和NSMutableArray类

在之前的一篇文章中介绍了Foundation框架中的NSString类和NSMutableString类,今天我们继续来看一下Foundation框架中的NSArray类和NSMutableArray类,其实NSArray类和Java中的List差不多,算是一种数据结构,当然我们从这两个类可以看到,NSArray类是不可变的,NSMutableArray类是可变的. 下面就先来看一下NSArray类: 一.NSArray类 1 // 2 // main.m 3 // 16_NSArray 4 /

OC学习篇之---Foundation框架中的其他类(NSNumber,NSDate,NSExcetion)

1.NSNumber 这个类主要是用来封装基本类型的,说到这里,就不得不说一下了: OC中的集合是不允许存入基本类型的,所以NSNumber类就诞生了,需要将基本类型封装一下,然后存进去,这个类似于Java中的自动装箱和拆箱,Java中的集合其实也是不允许存入基本类型的,但是我们任然看可以那么操作,就是因为有自动装箱功能,如果你将Eclipse的JDK改成5.0之前的,你看看还能操作吗.. 注:那为什么基本类型不能存入到集合中呢? 原因是在操作集合的时候会操作集合元素中的方法,但是基本类型是没有

Foundation框架下的常用类(NSNumber, NSValue, NSDate,NSDateFormatter)

1.NSNumber 将基础数类型数据转成对象数据(比如int  float double BOOL  long等等) //通过NSNumber将基础数类型数据转成对象数据. NSNumber * intNumber = [[NSNumber alloc] initWithInt:50]; NSNumber * floatNumber = [NSNumber numberWithFloat:45.3]; //xcode4.6以后,可以采用如下写法 NSNumber * doubleNumber