直接上代码 输出结果也在相应的代码里标注出来了

 //main.m文件
#import <Foundation/Foundation.h>
#import "Student.h" int main(int argc, const char * argv[]) {
@autoreleasepool { NSMutableArray <Student *> *_studentArrM;
NSMutableArray <Student *> *_studentArrMTest; _studentArrM = [NSMutableArray array];
_studentArrMTest = [NSMutableArray array]; Student *s1 = [Student studentWithNum: chinese:90.0 math:96.0 english:100.0];
Student *s2 = [Student studentWithNum: chinese:90.0 math:100.0 english:96.0];
Student *s3 = [Student studentWithNum: chinese:100.0 math:90.0 english:96.0]; [_studentArrM addObject:s1];
[_studentArrM addObject:s2];
[_studentArrM addObject:s3]; double mathAvg = [[_studentArrM valueForKeyPath:@"@avg.math"]doubleValue];
double mathMax = [[_studentArrM valueForKeyPath:@"@max.math"]doubleValue];
double mathMin = [[_studentArrM valueForKeyPath:@"@min.math"]doubleValue];
double mathSum = [[_studentArrM valueForKeyPath:@"@sum.math"]doubleValue];
NSLog(@"数学平均分%f 数学最高分%f 数学最低分%f 所有人的数学总分%f",mathAvg,mathMax,mathMin,mathSum); /*
输出的内容为:数学平均分95.333333 数学最高分100.000000 数学最低分90.000000 所有人的数学总分286.000000 提示:有兴趣的话可以自己多测试几组数据
*/ //接下来试着处理一下数组中的对象的是否有重复的问题
//测试需要我们可以再次给可变数组添加一个重复的对象
[_studentArrM addObject:s2];
[_studentArrM addObject:s2]; NSArray *arrDistinct = [_studentArrM valueForKeyPath:@"@distinctUnionOfObjects.num"];
NSArray *arrUnion = [_studentArrM valueForKeyPath:@"@unionOfObjects.num"]; NSLog(@"DistinctArray %@ \n UnionArray %@",arrDistinct,arrUnion);
/*
输出的内容为:
DistinctArray (
3,
2,
1
)//提示:没有重复的所有值
UnionArray (
1,
2,
3,
2,
2
)//提示:有重复的所有值
*/ //为了处理 多个数组 中的重复值的情况再次添加一个一个对象到测试数组
[_studentArrMTest addObject:s2]; NSLog(@"%@",[@[_studentArrM,_studentArrMTest] valueForKeyPath:@"@distinctUnionOfArrays.num"]);
NSLog(@"%@",[@[_studentArrM,_studentArrMTest] valueForKeyPath:@"@unionOfArrays.num"]);
/*
输出的内容为
(3,
2,
1
)//提示:没有重复的所有值 (1,
2,
3,
2,
2,
2
)//提示:有重复的所有值 */
}
return ;
}
//Student.h文件
#import <Foundation/Foundation.h> @interface Student : NSObject /**
学号
*/
@property (nonatomic,assign)int num;
/**
语文成绩
*/
@property (nonatomic,assign)double chinese;
/**
语文成绩
*/
@property (nonatomic,assign)double math;
/**
语文成绩
*/
@property (nonatomic,assign)double english; - (instancetype)initWithNum:(int)num chinese:(double)chinese math:(double)math english:(double)english; + (instancetype)studentWithNum:(int)num chinese:(double)chinese math:(double)math english:(double)english;
 1 //Student.m文件
#import "Student.h" @implementation Student - (instancetype)initWithNum:(int)num chinese:(double)chinese math:(double)math english:(double)english{ self = [super init];
if(self){
_num = num;
_chinese = chinese;
_math = math;
_english = english;
}
return self; } + (instancetype)studentWithNum:(int)num chinese:(double)chinese math:(double)math english:(double)english{ return [[Student alloc]initWithNum:num chinese:chinese math:math english:english]; } @end

利用KVC的方式更方便地获取数组中对象的属性的最值平均值等的更多相关文章

  1. freemarker获取封装类中对象的属性

    freemarker获取封装类中对象的属性 1.设计思路 (1)封装学生类 (2)创建数据模型 (3)新建student.ftl (4)运行Junit测试文件,生成HTML文件 2.封装学生类 Stu ...

  2. freemarker获取封装类中对象的属性(六)

    freemarker获取封装类中对象的属性 1.设计思路 (1)封装学生类 (2)创建数据模型 (3)新建student.ftl (4)运行Junit测试文件,生成HTML文件 2.封装学生类 Stu ...

  3. PHP获取数组最后一个元素的键和值

    <?php /** * PHP获取数组中最后一个元素下标和值 */ $arr = ['1' => 'name', '3' => 2, 5 => 6, 'name' => ...

  4. php 获取数组第一个key 第一个键值对 等等

    PHP 获取数组中的第一个元素或最后一个元素的值或者键值可以使用 PHP 自带的数组函数. PHP 获取数组中的第一个元素的值或者键值所使用的函数: current() - 返回数组中当前元素值(即: ...

  5. springboot中spring.profiles.active来引入多个properties文件 & Springboot获取容器中对象

    1.    引入多个properties文件 很多时候,我们项目在开发环境和生成环境的环境配置是不一样的,例如,数据库配置,在开发的时候,我们一般用测试数据库,而在生产环境的时候,我们是用正式的数据, ...

  6. js获取数组中的最大值/最小值

    目录 前言 1. 使用Math的静态方法max/min 1.1 结合ES6的扩展运算符...使用 1.2 结合apply/call方法来使用 1.3 结合reduce来使用 2. 排序获取 2.1 只 ...

  7. php获取数组中重复数据的两种方法

    分享下php获取数组中重复数据的两种方法. 1,利用php提供的函数,array_unique和array_diff_assoc来实现 <?php function FetchRepeatMem ...

  8. Javascript获取数组中的最大值和最小值的方法汇总

    比较数组中数值的大小是比较常见的操作,下面同本文给大家分享四种放哪广发获取数组中最大值和最小值,对此感兴趣的朋友一起学习吧   比较数组中数值的大小是比较常见的操作,比较大小的方法有多种,比如可以使用 ...

  9. Java获取未知类型对象的属性

    获取未知类型对象的属性通常有两种方式: 一是通过自定义注解的方式,通过获取被注解的属性从而获取属性的值,这种方式也是Spring参数注入的重要实现手段 二是通过反射获取属性的名称,通过属性名从而获取属 ...

随机推荐

  1. 了解Java基础原理

    Java 是1995年SUN公司推出的一门高级编程语言,是面向互联网的语言,WEB应用程序首选的语言(安卓底层,大数据hadoop框架用java编写,Spark用Scala编写,Scala用java写 ...

  2. SQL server数据库备份还原问题备忘(亲测有效)

    问题一:SQL server数据库备份还原方法 http://www.cnblogs.com/zgqys1980/archive/2012/07/04/2576382.html 问题二:无法执行 BA ...

  3. jvm004 解析与分派

    解析 所有方法调用中的目标方法在Class文件里面都是常量池中的符号引用,在类加载的解析阶段,会将其中的一部分符号引用转化为直接引用.这种解析的前提是:方法在程序真正运行之前就有一个可确定的调用版本, ...

  4. 玩玩微信公众号Java版之二:接收、处理及返回微信消息

    前面已经配置了微信服务器,那么先开始最简单的接收微信消息吧~   可以用我们的微信号来直接进行测试,下面先看测试效果图:   这是最基本的文本消息的接收.处理及返回,来看看是怎么实现的吧!   首先可 ...

  5. python基础(7):字符编码

    今天我们进入字符编码的学习.字符编码是一个多理论少结论的知识点,我会总结很多的知识点.我们只需要通读当作了解即可,最后我会总结需要我们理解掌握的重点. 一.学习字符编码的计算机基础储备 1.计算机软件 ...

  6. 【Django】django 的request和response(转)

    当请求一个页面时,Django 把请求的 metadata 数据包装成一个 HttpRequest 对象,然后 Django 加载合适的 view 方法,把这个 HttpRequest 对象作为第一个 ...

  7. TCP/IP协议之IP层

    TCP/IP协议的结构参见下图.有应用层,运输层,网络层,链路层. 但是如果更细化的话,其实还有几层没在这上面体现出来. 1 表示层:数据格式化,代码转换,加密. 没有协议 2 会话层:解除或者建立与 ...

  8. vue组件的那些事($children,$refs,$parent)的使用

    如果项目很大,组件很多,怎么样才能准确的.快速的寻找到我们想要的组件了?? 1)$refs 首先你的给子组件做标记.demo :<firstchild ref="one"&g ...

  9. Android 性能测试——Heap Viewer 工具

    Android 性能测试--Heap Viewer 工具 Heap Viewer能做什么? 实时查看App分配的内存大小和空闲内存大小 发现Memory Leaks Heap Viewer使用条件 5 ...

  10. 踩坑之路_"var name = ' ';"_迷之BUG

    情景介绍:最近写一个拖拽生成图表的工具,自己的思路每次mousedown的时候动态将this的name属性值赋值给全局中变量(自己手贱测试时直接将变量名命名为了'name',一大波bug还有30s到达 ...