iOS开辟实战,javascript高端学习笔记整理

今日收看同事写的一段排序代码,笔者首先反应是只借使日前这种须要,笔者不会这么写,同不时候,小编又在想他如此写是还是不是有别的意图,这种写法有哪些受益,还会有未有任何方式可以完成,于是就有了那篇笔记

NSArray

一.js面向对象的一种完毕

一.js面向对象的一种实现

 //按字母顺序排序 - 升序 //同事写法 NSArray *sortedArray = [keys sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) { return [obj1 compare:obj2]; }]; //我会这样写 - 相信大多数人都会这样写 NSArray *sortedArray = [keys sortedArrayUsingSelector:@selector];

 

复制代码 代码如下:

复制代码 代码如下:

️首先分明你要相比的因素是一模二样品种,不然程序会crash;这里只讲不足变数组的排序,可变数组的排序原理一样,方法名分化而已;

 

  <script type="text/javascript">
function Person() {
this.name = "张三";
this.age = 0;
var nickName = "小三"; //类似私有变量,函数中的局地变量在函数推行完后机动销毁.
this.SayHi = function () {
alert("小编的名字是" this.name " ,大家都叫作者" nickName " ,笔者二零一六年曾经" this.age "岁了");
}
}
/////////////////////////
function Student(myclass, myteacher) {
this.myClass = myclass;
this.myTeacher = myteacher;
this.SayHi = function () {
if (this.myClass != undefined) {
alert("我是" this.myClass "的" this.name);
}
else if (arguments.length == 2) {
alert("小编是" this.myClass "的" this.name ", 作者的教员是" this.myTeacher);
}
else {
new Person().SayHi();
}
}
}
Student.prototype = new Person(); //创立承继关系
//////////////
onload = function () {
var p = new Person(); //类似实例化类Person,对象的创始(分析四回)并不是推荐用法
p.age = 18; //给Person的age赋值, age相当于属性
p.SayHi(); //调用Person里的国有措施,输出结果:小编的名字是张三 ,大家都叫自身小三 ,我当年早就18岁了!
var stu = new Student('八年级二班', 'jameszou'); //有参构造函数
stu.name = 'le'; //父类的属性
stu.SayHi(); //Student重写了SayHi方法
var stu1 = new Student();
stu1.myClass = '三年级三班';
stu1.myTeacher = 'ly';
stu1.SayHi(); //输出:笔者是八年级三班的张三"
var stu2 = new Student();
stu2.age = 20;
stu2.SayHi();//输出:?:笔者的名字是张三,大家都叫作者小三,笔者二零一三年0岁了
}
</script>

  <script type="text/javascript">
function Person() {
this.name = "张三";
this.age = 0;
var nickName = "小三"; //类似私有变量,函数中的局地变量在函数实践完后活动销毁.
this.SayHi = function () {
alert("笔者的名字是" this.name " ,我们都叫自身" nickName " ,小编当年早已" this.age "岁了");
}
}
/////////////////////////
function Student(myclass, myteacher) {
this.myClass = myclass;
this.myTeacher = myteacher;
this.SayHi = function () {
if (this.myClass != undefined) {
alert("我是" this.myClass "的" this.name);
}
else if (arguments.length == 2) {
alert("小编是" this.myClass "的" this.name ", 作者的先生是" this.myTeacher);
}
else {
new Person().SayHi();
}
}
}
Student.prototype = new Person(); //创制承接关系
//////////////
onload = function () {
var p = new Person(); //类似实例化类Person,对象的创办(深入分析一回)并非引入用法
p.age = 18; //给Person的age赋值, age也就是属性
p.SayHi(); //调用Person里的公物艺术,输出结果:作者的名字是张三 ,我们都叫本身小三 ,小编当年早已18岁了!
var stu = new Student('五年级二班', 'jameszou'); //有参构造函数
stu.name = 'le'; //父类的品质
stu.SayHi(); //Student重写了SayHi方法
var stu1 = new Student();
stu1.myClass = '四年级三班';
stu1.myTeacher = 'ly';
stu1.SayHi(); //输出:笔者是六年级三班的张三"
var stu2 = new Student();
stu2.age = 20;
stu2.SayHi();//输出:?:小编的名字是张三,我们都叫笔者小三,作者今年0岁了
}
</script>

1. 先来介绍一下 - (NSArray *)sortedArrayUsingSelector:comparator; 重回一个数组,并通过给定的相比艺术来接纳排序后的成分。

借使前边的selector为compare: 则私下认可升序排序,适用于数组内成分为简便类型的排序,如:字符串、基本数字类型。要是是字符串类型,则会从第贰个字符开始逐条相比;数字类型则直接十分的大小,相比简单,这里不再演示;

 NSArray *arr1 = @[@"lucy",@"2tom",@"lykk",@"john",@"marry"]; //升序 NSArray *result1 = [arr1 sortedArrayUsingSelector:@selector]; NSLog(@"升序 = %@",result1); //当然先这样实现了升序,但你想要降序,怎么办? //倒序输出 -> 得到降序数组 result1 = [[result1 reverseObjectEnumerator] allObjects]; NSLog(@"降序 = %@",result1);

图片 1

譬如前面的selector为自定义方法,适用于复杂对象的排序,这里笔者定义贰个学生对象,个人感觉该措施稍麻烦,实际花费中利用十分的少。首先必要去对象的.h 文件去注明排序方法,并去.m文件目录下达成下。

图片 2Student.h图片 3Student.m图片 4外面调用排序方法排序图片 5表达排序结果

瞩目:这里还会有一种情状,就是相比较的这两个成分相等时,这么些排序的逐个是怎么样的?作者修改了上面stu队列的七个地点:① 将stu4 的age改变为20;② 更动stu4在原数组中的地方,下标由3->1我们再来看一下按age排的结果:

图片 6

大家得以观望汤姆 和 john的age一样,然而Tom排在了john的先头,原因是汤姆在原始队列中的地点比john靠前。不过汤姆原来的下标为1,未来改为了2,可知钦定排序准绳的优先级最高,假如出现比较成分相等的景色,系统才会暗中同意比较原始下标。那让笔者想开了上学时班里的成就表,明明本人和少数个同学的大成一样,可可为何本身排在了最前面?:①当成绩一样之后,排名软件没做拍卖,暗中认可依据原始队列下标排序;②也只怕扩张一条相比较法则,再依赖姓名相比/依据学号比较;③也说不定会油然则生姓名同样的意况,这时候再定义一条法规,依照学号来比较(其实这里比较产生绩后再依靠学号比较好,学号相似在叁个学府里是举世无双的)代码中具体怎么加法规,下边会涉及

从本质上讲,NSArray 就是三个存放对象的容器。

二.6种简易数据类型: 1)Undefined.二个变量被定义不过没有给她赋值.
2)Null.(援引类型)
3)Number.数值类型
  var num = 1.0以此时候num是int类型,独有当小数点前边不为0的时候才是浮点型,
  isNaN()能够判明传人的值是或不是为Number类型,
  var num = parseInt('112412aaa11'); num=112412;
4)Boolean.
5)String
6)function
Function类型:
实施情况:便是当下函数(方法)所处在的父碰着。举例在window下举办的函数他的实施情状便是window。
从未有过块级作用域:if等话语未有用块状功用域,if,for等用大括号括起来的代码并无法形成贰个疙瘩功效域。
var变量评释:用var表明变量时,会他把加多到近期的可用情状,即不用var定义的三个变量是全局变量.
证明语句会首先实践,以管教程序的运维.
垃圾堆回收:变量对象设为null的时候原对象将被电动回收.
属性:
this.函数所在的进行碰到,函数在举行时所处的效果与利益域.
prototype(原型).

二.6种简单数据类型: 1)Undefined.叁个变量被定义不过从未给她赋值.
2)Null.(援用类型)
3)Number.数值类型
  var num = 1.0这年num是int类型,独有当小数点前边不为0的时候才是浮点型,
  isNaN()可以判明传人的值是还是不是为Number类型,
  var num = parseInt('112412aaa11'); num=112412;
4)Boolean.
5)String
6)function
Function类型:
实施情状:正是近来函数(方法)所处在的父情状。比方在window下进行的函数他的施行意况正是window。
尚未块级功效域:if等语句没有用块状成效域,if,for等用大括号括起来的代码并不能够产生三个疙瘩功能域。
var变量注解:用var评释变量时,会他把添加到方今的可用情状,即不用var定义的叁个变量是大局变量.
宣示语句会首先实践,以确认保证程序的运营.
污源回收:变量对象设为null的时候原对象将被活动回收.
属性:
this.函数所在的实践意况,函数在实行时所处的功力域.
prototype(原型).

2. 接下去我们来介绍一下本人共事使用的这种排序方法sortedArrayUsingComparator:^NSComparisonResult(id _Nonnull obj1, id _Nonnull obj2) { }];

这是Xcode4 之后出的贰个比较好用的一个排序方法,不像自定义排序方法那样麻烦,个人提议在支付中复杂类型的排序用这种办法。对简易类型进行排序

图片 7图片 8排序结果

对复杂对象开展排序

图片 9图片 10排序结果

  1. 尖端排序 :按描述进行排序 - 制订一套排序法规

图片 11图片 12排序结果

NSArray只能存款和储蓄Objective-C 对象,而不能够储存C语言中的基本数据类型,举例:int,flot,指针等。 在利用NSArray时,需非常注意,必须以nil 结尾。以此来代表停止。

三.复杂类型
Object:
Object类型本质是四个无序的键值对列表,类似于聚焦,json格式。
创办Object能够有多种主意:
  1)var obj = new Object(); obj.name="lz"; obj.age=17;
  2)var s = {}; s.name="ly"; s.age=18;
  3)var s = {"name":"ln","age":"17"};
拜候Object对象的质量的艺术:
  1)obj.name
  2)obj["name"]
Array类型:
约等于List<T>,length属性是可读写的(能够利用那点刨除数组成分)
数组的栈方法:(后进先出)
  push() 往里加 pop() 从栈头往外拿
数组的队列方法:(先进先出)
  shift() 从队列尾巴部分往外拿 unshift() 从队列尾部往里加
排序:
  sort() 排正序,将数组中的数据根据一定的顺序排列,参数能够传递一个可传唱比较艺术(类似于接口) reverse() 翻转
  连接数组: concat()
  var colors=["a","b"];
  var newcolor=colors.concat("yellow",["c","d"]);//colors有5个元素。
  concate方法中若传入数组,会把该数组拆分,将里面成分参预指标数组中。若传入json格式数据,三个json数据就视作三个因素插足数组。
四.其他 typeof: return true or false,
instanceof 决断复杂类型的花色 return true or false,假使用它来决断值基本类型类型永恒再次来到false,
eval()他会把eval()中的参数深入分析出来,插入到eval试行的地点,效果一定于在相应的岗位一向写入JS代码

三.复杂类型
Object:
Object类型本质是二个九冬的键值对列表,类似于集中,json格式。
创立Object能够有两种艺术:
  1)var obj = new Object(); obj.name="lz"; obj.age=17;
  2)var s = {}; s.name="ly"; s.age=18;
  3)var s = {"name":"ln","age":"17"};
访谈Object对象的品质的主意:
  1)obj.name
  2)obj["name"]
Array类型:
一定于List<T>,length属性是可读写的(能够运用那点剔除数组成分)
数组的栈方法:(后进先出)
  push() 往里加 pop() 从栈头往外拿
数组的行列方法:(先进先出)
  shift() 从队列尾巴部分往外拿 unshift() 从队列尾巴部分往里加
排序:
  sort() 排正序,将数组中的数据根据一定的顺序排列,参数能够传递一个可传唱相比艺术(类似于接口) reverse() 翻转
  连接数组: concat()
  var colors=["a","b"];
  var newcolor=colors.concat("yellow",["c","d"]);//colors有5个元素。
  concate方法中若传入数组,会把该数组拆分,将其凉月素插手目的数组中。若传入json格式数据,二个json数据就当作多少个成分参预数组。
四.其他 typeof: return true or false,
instanceof 推断复杂类型的类型 return true or false,如若用它来剖断值基本类型类型永恒重返false,
eval()他会把eval()中的参数剖析出来,插入到eval推行的职分,效果相当于在相应的职位一贯写入JS代码

总结:

上述轻松的牵线了三种在OC中排序的法门,有纰漏之处还请我们提出,后续临时光再补偿任何排序方法;当然使用冒泡排序,或然选拔排序也得以兑现上述排序,这里不再代码演示。

NSArray 成立的是静态数组,一旦成立之后,就再也不能够增添和删除数组中的对象了。

复制代码 代码如下: script type="text/javascript" function Person() { this.name = "张三"; this.age = 0; var nickName = "小三"; //类似私...

亲们喜欢的话,请给个❤️ 额,多谢亲们的支撑!!!

 

 

1.NSArray的创建:

类格局创立数组:

  1. NSArray *array1 = [NSArray arrayWithObject:@"obj"];  
  2. NSArray *array2 = [NSArray arrayWithObjects:@"obj1", @"obj2", @"obj3", nil];  
  3. NSArray *array3 = [NSArray arrayWithArray:array2];  

实例方法创立数组:

NSArray *array4 = [[NSArray alloc] initWithObjects:@"AAA", @"bbb", nil];  

NSArray *arr = [NSArray array];//早先化二个空的数组(临时用);

        NSArray *arr1 = [NSArray arrayWithObject:@"123"];

        NSLog(@"%@",arr1);//初阶化二个满含一个成分的数组;

        NSArray *arr2 = [NSArray arrayWithObjects:@"zhangyu",@"zhangdawei",@"liuhuan" ,nil];//初步化七个因素的数组,成分之间用逗号隔开分离,最终以nil甘休;

        NSArray *arr3 = @[@"123",

                          @"456",

                         @"789"

                          ];//起头化五个要素时数组成分之间用逗号隔绝,注意,最终贰个成分后边不要加逗号(如若元素是一个类的指标则不用双引号)。

 

2.NSArray的使用:

(1)求数组的尺寸:

        NSUInteger count = arr3.count;//数组成分的个数(数组的尺寸);

        NSLog(@"数组成分的个数:%zi",count);

       NSLog(@"数组成分的个数:%zi",arr3.count);

 

array == nil 和 [array count] == 0

前端为true的时候表示这么些指标是nil,是多个空的指针,它竟然未曾被创立出来。

后任为true表示那几个目的为nil可能尚未别的因素。

 

(2)取数组中的成分

        [arr3 firstObject];//数组的第一个成分
        [arr3 lastObject];//数组的末尾叁个要素
        [arr3 objectAtIndex:2];//钦点地方上的数组成分
        long int i = [arr3 indexOfObject:@"123"];//获取某些元素在数组中的地点(数据类型为long/long int/NSUInteger(Integer 整数 全体 完整的东西));

        NSLog(@"i=%ld",i);

(3)决断数组中是不是含有某些成分

        BOOL flag = [arr3 containsObject:@"123"];//剖断数组中是或不是含有某些成分 (1包蕴, 0不含有)

        NSLog(@"flag=%d",flag);

 

(4)数组的遍历  (很珍视)

<1>for循环遍历(最常用)

        for(int i = 0;i < arr3.count;i )
        {
            NSString *str = arr3[i];
            NSLog(@"%@",str);
           //id obj = [arr3 objectAtIndex:i];
           //NSLog(@"%@",obj);

        }

<2>使用枚举器进行遍历

        NSEnumerator *e = [arr3 objectEnumerator];//获取数组全数因素的枚举器
        //[e nextObject]先是次遍历,nextobject指向数组的首成分,当取值结束之后,再指向下一个因素,直到取完最终二个要素,此时nextObject指向nil,值为0,遍历甘休
        id obj;
        while(obj=[e nextObject])

            NSLog(@"%@",obj);

<3>连忙枚举(最快速,但不能够使用下标)(不须求NSEnumerator *e = [arr3 objectEnumerator];直接用for实行遍历)

        for(id obj1 in arr3)

            NSLog(@"%@",obj1);

<4>数组存放自定义类的对象(定义三个student类和name,number属性 ,开头化5个对象)

        Student *stu1 = [[Student alloc]init];
        stu1.name = @"张一";
        stu1.number = 201501;
        Student *stu2 = [[Student alloc]init];
        stu2.name = @"张二";
        stu2.number = 201502;
        Student *stu3 = [[Student alloc]init];
        stu3.name = @"张三";
        stu3.number = 201503;
        Student *stu4 = [[Student alloc]init];
        stu4.name = @"张四";
        stu4.number = 201504;
        Student *stu5 = [[Student alloc]init];
        stu5.name = @"张五";
        stu5.number = 201505;
        NSArray *studentarr2 =@[stu1,
                                stu2,
                                stu3,
                                stu4,
                                stu5
                                ];
        for (int i = 0; i < studentarr2.count; i ) {

            id stu = studentarr2[i];

            //剖断有些对象是不是是某些类,多用于拍卖项目不明确的境况
            if ([stu isKindOfClass:[Student class]]) {
                NSLog(@"姓名:%@ 学号:%d",[stu name],[stu number]);
                          }

                 }

运作的结果:

姓名:张一 学号:201501
姓名:张二
学号:201502
姓名:张三
学号:201503
姓名:张四
学号:201504

姓名:张五 学号:201505

 

(5)排序(从小到大)

       NSArray *arr4  = @[@"6",@"9",@"8",@"1"];

        NSArray *arr5 = [arr4 sortedArrayUsingSelector:@selector(compare:)];(用于数组中的成分不是指标(是字符串的景观!))

        NSLog(@"%@",arr5);

 

投入先创制一个Student类,初始化多个对象stu1,stu2,stu3,stu4归入数组,按须要开展排序

排序方法定义:

-(NSComparisonResult)compareWithScore:(Student *)stu;

排序方法达成:

-(NSComparisonResult)compareWithScore:(Student *)stu
{
    NSComparisonResult result;
    if(self.score < stu.score)
        result = 1;
    else result = -1;
    return result;

}

主程序:

 NSArray *studentarr = @[    stu1,

                             stu2,
                             stu3,

                             stu4

        //数组成分是有些类的指标的排序 ];

        //第一种办法:
        NSArray *scorearr1 = [studentarr sortedArrayUsingSelector:@selector(compareWithScore:)];
        NSLog(@"scorearr1=%@",scorearr1);
        //第三种格局:
        NSArray *scorearr2 = [studentarr sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
            NSComparisonResult result = -1;
           
            if ([obj1 score] < [obj2 score])
                result = 1;
                return result;
           
        }];
        NSLog(@"scorearr2=%@",scorearr2);
        //第两种艺术(描述方法):
        NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey:@"score" ascending:NO  ];
        NSArray *desarr = @[sort];
        NSArray *scorearr3 = [studentarr sortedArrayUsingDescriptors:desarr];

        NSLog(@"scorearr3=%@",scorearr3);

       // 依照学生的大成由低到高排序,若是成绩一样,则根据年龄从小到大排序*(描述方法)

        NSSortDescriptor *sort1 = [NSSortDescriptor sortDescriptorWithKey:@"score" ascending:YES  ];
        NSSortDescriptor *sort2 = [NSSortDescriptor sortDescriptorWithKey:@"age" ascending:YES  ];

        NSArray *desarr1 = @[sort1,sort2];
        NSArray *scoreagearr = [studentarr sortedArrayUsingDescriptors:desarr1];

        NSLog(@"scoreagearr=%@",scoreagearr);

 

本文由星彩网app下载发布于计算机编程,转载请注明出处:iOS开辟实战,javascript高端学习笔记整理

TAG标签: 星彩网app下载
Ctrl+D 将本页面保存为书签,全面了解最新资讯,方便快捷。