一、三个核心概念(必考定义)
1. 高阶函数(高级函数)
参数也是一个函数的函数,数组所有条件方法全部都是高阶函数。
2. 回调函数
以参数的形式,传递进另一个函数的函数(Find、FindAll 第二个参数都是回调函数)。
3. 递归函数
自己调用自己的函数(数组方法暂时不用,概念背诵)。
二、普通IndexOf 与 高阶Find区别
1. Array.IndexOf()
只能固定值精准匹配 ,不能根据条件查询(不能大于、小于、奇偶、整除)。
2. 高阶Find系列
可以自定义条件查询(大于、小于、偶数、奇数、整除、长度判断等)。
三、静态高阶方法大全(Array.xxx)
调用方式:Array.方法名(数组, 回调函数)
1. Array.Find() 【条件找单个元素】
原理(必背)
自动循环数组,每遍历一个元素就调用回调函数; 回调函数返回 true,立刻返回当前元素,停止遍历。
规则
-
返回:第一个满足条件的元素
-
找不到:返回 当前类型默认值(int返回0,string返回null)
案例
Array.Find(ages, FindSmall18); // 找第一个小于18
Array.Find(ages, FindEven); // 找第一个偶数
Array.Find(ages, FindOdd); // 找第一个奇数
Array.Find(ages, Find35); // 找第一个同时被3、5整除
2. Array.FindLast() 【从后往前找单个】
倒序遍历数组,返回最后一个满足条件的元素。
Array.FindLast(ages, Find35);
3. Array.FindAll() 【条件找全部元素】
遍历所有元素,返回所有满足条件的元素,组成新数组。
找不到返回:空数组(长度0)
int[] arr = Array.FindAll(ages,FindOdd);
4. Array.FindIndex() 【找满足条件第一个下标】
返回:第一个满足条件元素的索引
找不到返回:-1
Array.FindIndex(ages, FindEven);
5. Array.FindLastIndex() 【倒序找下标】
返回:最后一个满足条件元素的索引
Array.FindLastIndex(ages, FindEven);
6. Array.ForEach() 【高阶遍历】
自动遍历数组每一个元素,无返回值,回调函数负责执行逻辑。
Array.ForEach(ages,F1);
7. Array.TrueForAll() 【全部满足才为true】
所有元素全部满足条件 → true 只要有一个不满足 → false
8. Array.Exists() 【存在满足即为true】
只要存在一个满足条件 → true 全部不满足 → false
四、数组实例方法(非静态:数组名.方法)
1. All() 完全等价 TrueForAll
所有元素满足条件 → true
2. Any() 完全等价 Exists
任意一个满足条件 → true
3. GetValue(下标)
获取指定下标元素
4. SetValue(值,下标)
修改指定下标元素
5. GetType()
获取当前对象类型
6. GetLength(维度)
获取指定维度长度(多维数组专用)
五、终极对应关系(必背简答题)
六、所有高阶方法返回值汇总(满分必背)
-
Find:返回单个元素 / 默认值
-
FindLast:返回最后匹配元素 / 默认值
-
FindAll:返回新数组(找不到返回空数组)
-
FindIndex:返回下标,找不到 -1
-
FindLastIndex:返回最后匹配下标,找不到 -1
-
Exists / Any:bool(有满足true)
-
TrueForAll / All:bool(全满足true)
-
ForEach:无返回值,纯遍历执行
七、回调函数模板(考试通用)
// 条件判断模板
public static bool 方法名(int n)
{
return 条件表达式;
}
// 遍历模板
public static void 方法名(int n)
{
// 执行逻辑
}
八、终极默写短句(考前速记)
-
IndexOf只能匹配固定值,Find系列可以条件查询
-
Find找第一个,FindLast找最后一个,FindAll找全部
-
FindIndex找下标,找不到返回-1
-
Exists、Any有真即真;TrueForAll、All全真才真
-
ForEach高阶遍历,自动循环无需for
-
静态Array.方法,实例直接点方法