数组 复习

//
//  main.m
//  oc复习
//
//  Created by User on 3/10/13.
//  Copyright (c) 2013 User. All rights reserved.
//

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

//创建一个数组
void arrayCreate() {
    // 创建一个空的数组
    NSArray *array = [NSArray array];
    // 创建有1个元素的数组
    array = [NSArray arrayWithObject:@"123"];
    // 创建有多个元素的数组
    array = [NSArray arrayWithObjects:@"a", @"b", @"c", nil];
    // 数组的元素
    NSInteger count = [array count];
    // count = array.count;
    NSLog(@"%ld", count);
}

#pragma mark 数组的简单使用
void arrayUse() {
    NSArray *array = [NSArray arrayWithObjects:@"a", @"b", @"c", nil];
    // 判断是否包含了某个元素
    if ([array containsObject:@"a"]) {
        NSLog(@"包含了字符串a");
    }
    //得到数组的最后一个元素
    NSString *last = [array lastObject];
    NSLog(@"last=%@", last);
    //得到索引为1的元素
    NSString *str = [array objectAtIndex:1];
    NSLog(@"%@", str);
    //得到元素c的索引
    NSInteger index = [array indexOfObject:@"c"];
    NSLog(@"index=%ld", index);
}

#pragma mark 数组的内存管理
void arrayMemory() {
    // 1
    Student *stu1 = [[Student alloc] init];
    Student *stu2 = [[Student alloc] init];
    Student *stu3 = [[Student alloc] init];
    NSLog(@"stu1:%zi", [stu1 retainCount]);
    // 当把一个对象塞进数组中时,这个对象的计数器会加1,也就是说数组会对它做一次retain操作
    // 2
    NSArray *array = [[NSArray alloc] initWithObjects:stu1, stu2, stu3, nil];
    NSLog(@"stu1:%zi", [stu1 retainCount]);
    // 1
    [stu1 release];
    [stu2 release];
    [stu3 release];
    // 数组被销毁的时候,会对内部的所有元素都做一次release操作
    // 0
    [array release];
}

//给数组里面的元素发送消息
void arrayMessage() {
    Student *stu1 = [Student student];
    Student *stu2 = [Student student];
    Student *stu3 = [Student student];

    NSArray *array = [NSArray arrayWithObjects:stu1, stu2, stu3, nil];
    // 让数组里面的所有对象都调用test方法
    // [array makeObjectsPerformSelector:@selector(test)];
    [array makeObjectsPerformSelector:@selector(test2:) withObject:@"123"];
}

//遍历数组1
void arrayFor1() {
    Student *stu1 = [Student student];
    NSArray *array = [NSArray arrayWithObjects:stu1, @"1", @"2", @"3", nil];
    int count = array.count;
    for (int i = 0; i<count; i++) {
        // id == void *
        id obj = [array objectAtIndex:i];
        NSLog(@"%i-%@", i, obj);
    }
}

//遍历数组2
void arrayFor2() {
    Student *stu1 = [Student student];
    NSArray *array = [NSArray arrayWithObjects:stu1, @"1", @"2", @"3", nil];
    // 快速遍历
    int i =0;
    for (id obj in array) {
        NSLog(@"%i-%@", i, obj);
        i++;
    }
}

//遍历数组3
void arrayFor3() {
    Student *stu1 = [Student student];
    NSArray *array = [NSArray arrayWithObjects:stu1, @"1", @"2", @"3", nil];
    [array enumerateObjectsUsingBlock:
     ^(id obj, NSUInteger idx, BOOL *stop) {
         NSLog(@"%i-%@", idx, obj);

         // 如果索引为1,就停止遍历
         if (idx == 1) {
             // 利用指针修改外面BOOL变量的值
             *stop = YES;
         }
     }];
}

//遍历数组4
void arrayFor4() {
    Student *stu1 = [Student student];
    NSArray *array = [NSArray arrayWithObjects:stu1, @"1", @"2", @"3", nil];

    // 获取数组的迭代器
    // NSEnumerator *enumerator = [array objectEnumerator];
    // 反序迭代器(从尾部开始遍历元素)
    NSEnumerator *enumerator = [array reverseObjectEnumerator];

    // allObjects是取出没有被遍历过的对象
    NSArray *array2 = [enumerator allObjects];
    NSLog(@"array2:%@", array2);

    // 获取下一个需要遍历的元素
    id obj = nil;
    while (obj = [enumerator nextObject]) {
        NSLog(@"obj=%@", obj);
    }
}

//派生出新的数组
void arrayNew() {
    NSArray *array = [NSArray arrayWithObjects:@"1", @"2", nil];
    NSArray *array2 = [array arrayByAddingObject:@"3"];
    NSArray *array3 = [array arrayByAddingObjectsFromArray:[NSArray arrayWithObjects:@"4", @"5", nil]];
    NSLog(@"array:%@", array);//1,2
    NSLog(@"array2:%@", array2);//1,2,3
    NSLog(@"array3:%@", array3);//1,2,4,5

    NSArray *array4 = [NSArray arrayWithObjects:@"1", @"2", @"3", @"4", nil];
    NSRange range = NSMakeRange(1, 2);
    NSArray *array5 = [array4 subarrayWithRange:range];
    NSLog(@"array5:%@", array5);//2,3
}

#pragma mark 数组的其他用法
void arrayOther() {
    NSArray *array = [NSArray arrayWithObjects:@"1", @"2", @"3", @"4", nil];
    // 1-2-3-4
    // 利用分隔符-拼接所有的数组元素
    NSString *str = [array componentsJoinedByString:@"-"];
    NSLog(@"%@", str);
    // 将一个数组写入文件(生成的是一个xml文件)
    NSString *path = @"/Users/user/Desktop/array.xml";
    [array writeToFile:path atomically:YES];
    // 从文件中读取数组内容(文件有严格的格式要求)
    path = @"/Users/user/Desktop/array.xml";
    NSArray *array2 = [NSArray arrayWithContentsOfFile:path];
    NSLog(@"array2:%@", array2);
}

//数组排序1
void arraySort1() {
    NSArray *array = [NSArray arrayWithObjects:@"2", @"3", @"1", @"4", nil];
    // 返回一个排好序的数组,原来数组的元素顺序不会改变
    // 指定元素的比较方法:compare:
    NSArray *array2 = [array sortedArrayUsingSelector:@selector(compare:)];
    NSLog(@"array2:%@", array2);
}

//数组排序2
void arraySort2() {
    Student *stu1 = [Student studentWithFirstname:@"MingJie" lastname:@"Li"];
    Student *stu2 = [Student studentWithFirstname:@"LongHu" lastname:@"Huang"];
    Student *stu3 = [Student studentWithFirstname:@"LianJie" lastname:@"Li"];
    Student *stu4 = [Student studentWithFirstname:@"Jian" lastname:@"Xiao"];
    NSArray *array = [NSArray arrayWithObjects:stu1,stu2,stu3, stu4, nil];
    // 指定排序的比较方法
    NSArray *array2 = [array sortedArrayUsingSelector:@selector(compareStudent:)];
    NSLog(@"array2:%@", array2);
}

//数组排序3
void arraySort3() {
    Student *stu1 = [Student studentWithFirstname:@"MingJie" lastname:@"Li"];
    Student *stu2 = [Student studentWithFirstname:@"LongHu" lastname:@"Huang"];
    Student *stu3 = [Student studentWithFirstname:@"LianJie" lastname:@"Li"];
    Student *stu4 = [Student studentWithFirstname:@"Jian" lastname:@"Xiao"];
    NSArray *array = [NSArray arrayWithObjects:stu1,stu2,stu3, stu4, nil];
    // 利用block进行排序
    NSArray *array2 = [array sortedArrayUsingComparator:
                       ^NSComparisonResult(Student *obj1, Student *obj2) {
                           // 先按照姓排序
                           NSComparisonResult result = [obj1.lastname compare:obj2.lastname];
                           // 如果有相同的姓,就比较名字
                           if (result == NSOrderedSame) {
                               result = [obj1.firstname compare:obj2.firstname];
                           }
                           return result;
                       }];
    NSLog(@"array2:%@", array2);
}

//数组排序4-高级排序
void arraySort4() {
    Student *stu1 = [Student studentWithFirstname:@"MingJie" lastname:@"Li" bookName:@"book1"];
    Student *stu2 = [Student studentWithFirstname:@"LongHu" lastname:@"Huang" bookName:@"book2"];
    Student *stu3 = [Student studentWithFirstname:@"LianJie" lastname:@"Li" bookName:@"book2"];
    Student *stu4 = [Student studentWithFirstname:@"Jian" lastname:@"Xiao" bookName:@"book1"];
    NSArray *array = [NSArray arrayWithObjects:stu1,stu2,stu3, stu4, nil];
    // 1.先按照书名进行排序
    // 这里的key写的是@property的名称
    NSSortDescriptor *bookNameDesc = [NSSortDescriptor sortDescriptorWithKey:@"book.name" ascending:YES];
    // 2.再按照姓进行排序
    NSSortDescriptor *lastnameDesc = [NSSortDescriptor sortDescriptorWithKey:@"lastname" ascending:YES];
    // 3.再按照名进行排序
    NSSortDescriptor *firstnameDesc = [NSSortDescriptor sortDescriptorWithKey:@"firstname" ascending:YES];
    // 按顺序添加排序描述器
    NSArray *descs = [NSArray arrayWithObjects:bookNameDesc, lastnameDesc, firstnameDesc, nil];
    NSArray *array2 = [array sortedArrayUsingDescriptors:descs];
    NSLog(@"array2:%@", array2);
}

int main(int argc, const char * argv[])
{

    @autoreleasepool {
        arraySort4();
    }
    return 0;
}
时间: 2024-11-04 17:03:25

数组 复习的相关文章

二维树状数组复习—— SuperBrother打鼹鼠

在这个“打鼹鼠”的游戏中,鼹鼠会不时地从洞中钻出来,不过不会从洞口钻进去(鼹鼠真胆大……).洞口都在一个大小为n(n< =1024)的正方形中.这个正方形在一个平面直角坐标系中,左下角为(0,0),右上角为(n-1,n-1).洞口所在的位置都是整点,就是横纵坐标都为整数的点.而SuperBrother也不时地会想知道某一个范围的鼹鼠总数.这就是你的任务. 输入 每个输入文件有多行. 第一行,一个数n,表示鼹鼠的范围. 以后每一行开头都有一个数m,表示不同的操作: m=1,那么后面跟着3个数x,y

树状数组复习

今天重新复习了一下树状数组- -发现真的是一个很简洁的东西 引用请注明出处:http://blog.csdn.net/int64ago/article/details/7429868 写下这个标题,其实心里还是没底的,与其说是写博帖,不如说是做总结.第一个接触树状数组还是两年前,用什么语言来形容当时的感觉呢?……太神奇了!真的,无法表达出那种感觉,她是那么的优雅,10行不到的代码,却把事情干的如此出色!没有了解她原理的前提下即使把代码倒背如流也理解不了!其中,我就是一直没搞懂地在使用她.时隔两年

javascript数组复习

javascript还是有很多地方需要复习和熟练的地方,比如说数组. 数组的增速改查 先声明数组 var array=['a','b','c','d']; 增:array.push('e'); 数组按照先进先出原则:所以输出结果时["a", "b", "c", "d", "e"], 删:array.slice(2);则删除的是前两项固输出的结果时["c", "d",

一维数组复习,二维数组与多维数组

输入班级人数,输入每个人的分数,求班级最高分,最低分,以及去掉两个最高分并且去掉两个最低分之后的所有人员的平均分. 输入班级人数,输入一个人名,输入一个分数.求班级最高分是多少,是谁的分数(注意姓名跟分数对应) 运用两个一维数组: 运用一个一维数组: 一个元素是一个点,一维数组是一条线,二维数组是一个面,三维数组是一个立体. 二维数组: int [,]array=new int[3,2]{ {1,2}, {2,3}, {3,4} }; 其中3表示有三个一维数组,2表示每个一维数组中有两个元素.

数组复习

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { //练习一 //输入班级人数,根据人数创建数组 //将每一个人的语文,数学,英语成绩放进去 //计算出每

vijos p1512——SuperBrother打鼹鼠(树状数组)(复习)

背景 SuperBrother在机房里闲着没事干(再对比一下他的NOIP,真是讽刺啊......),于是便无聊地开始玩“打鼹鼠”...... 描述 在这个“打鼹鼠”的游戏中,鼹鼠会不时地从洞中钻出来,不过不会从洞口钻进去(鼹鼠真胆大……).洞口都在一个大小为n(n<=1024)的正方形中.这个正方形在一个平面直角坐标系中,左下角为(0,0),右上角为(n-1,n-1).洞口所在的位置都是整点,就是横纵坐标都为整数的点.而SuperBrother也不时地会想知道某一个范围的鼹鼠总数.这就是你的任务

C语言学习(1)数组复习

主题1:利用数组批量处理数据 1.数组和循环的结合 2.数组的定义 2.1)一维数组:类型符 数组名[常量表达式] 2.2)定义是为了通知计算机为其划分相应的内存 3.数组元素的引用 3.1表示形式:数组名[下标] 4.一维数组的初始化 如果在定义数值型数组时,指定了数组的长度并对之初始化,凡未被“初始化列表”指定初始化的数组元素,系统会自动把它们初始化为0(如果是字符型数组,则初始化为‘\0’,如果是指针型数组,则初始化为null,即空指针) 主题2:怎么定义和引用二维数组 1.定义的一般形式

指针和一维数组-复习

# include<stdio.h> void f(int* parr,int len)//二个参数确定一个数组,第一:数组第一个元素的地址:parr,第 二:数组的长度:len { int i; for(i=0; i<len; ++i) { printf("%d ",*(parr + i));//*(parr + i)等价于parr[i] } } int main(void) { int a[5] = {1, 2, 3, 4, 5}; printf("%d

7.30 数组复习 特殊集合

数组            一维数组            需要数据类型,以及长度            int [] array =new int[5];            冒泡排序                        {                for (int j = i; j < 4; j++)                {                    if (array[i] < array[j + 1])                    {