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

 //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. Sublime Text 关闭自动更新的办法

    解决关于Submit Text每次打开 都会跳出更新选项的问题 Windows 下: 打开 Preferences —— Settings—User { "color_scheme" ...

  2. jsp注册页面验证,easyui的jsp+js表单验证

    1.1下面的代码是写在Js里面的,就直接写进去不用什么其他东西,这样一个表单验证就好了(1.2图) $.extend($.fn.validatebox.defaults.rules, { phone: ...

  3. MyBatis的关联关系补充 多对多 继承

    多对多 一个学生有多个课程 一个课程有多个学生 思路分析 :使用一个中间表 用学生表和课程表的主键作为中间表的联合主键 1数据库表的设计 课程表 学生表 中间表 2/实体类的设计 课程类 public ...

  4. 学习笔记TF030:实现AlexNet

    ILSVRC(ImageNet Large Scale Visual Recognition Challenge)分类比赛.AlexNet 2012年冠军(top-5错误率16.4%,额外数据15.3 ...

  5. (转)盒子概念和DiV布局

    CSS盒子和DIV布局 (2013-11-24 16:17:29) 转载▼ 一.认识div层 1.<DIV>标记是一个区块容器标记,在标记之间可以放置其他一些HTML元素,例如p,h1,t ...

  6. Hello ReactJS

    前言 React学习前先搭好环境,官网的例子看着比较分散.结合webpack就可以体验完整的es6开发流程了. 源码:https://github.com/Ryan-Miao/hello-react- ...

  7. nodeJS之URL

    前面的话 在HTTP部分,详细介绍了URL的相关知识.而nodejs中的url模块提供了一些实用函数,用于URL处理与解析.本文将详细介绍nodeJS中的URL URL对象 解析 URL 对象有以下内 ...

  8. EF 中 Code First 的数据迁移以及创建视图

    写在前面: EF 中 Code First 的数据迁移网上有很多资料,我这份并没什么特别.Code First 创建视图网上也有很多资料,但好像很麻烦,而且亲测好像是无效的方法(可能是我太笨,没搞成功 ...

  9. LFLiveKit架构简介

    LFLiveSession LFLiveSession 是整个sdk的核心,提供对外部的主要接口.主要功能有:管理推流开关.管理音视频录制及渲染.管理录制渲染后的音视频编码.管理编码后的数据上传.管理 ...

  10. NYOJ--27--dfs--水池数目

    /* Name: NYOJ--27--水池数目 Author: shen_渊 Date: 17/04/17 15:42 Description: 经典dfs水题,,, */ #include<i ...