c#软件开发学习笔记

一、lambda表达式

lambda表达式:本质是一个函数,作为另外一个函数参数进行使用,也可以称为是匿名函数(箭头函数)
表达式语法:(参数类型 a,参数类型 b,...)=>{}
单独写lambda表达式会报错,要么写在高阶函数里面 要么找一个变量接收,
lambda表达式如果找一个变量接收的话,这个变量是类型使用这三种类型接收
1 Func<> 接收有返回值的函数,参数 0~16 个
2 Predicate<> 接收有返回值为bool类型的函数,参数1个
3 Action<> 接收无返回值的函数,参数 0~16 个

1.Func<>

//Func<int,int,int> 参数类型  最后一个类型是返回值的类型
//F4 函数名
//(int a, int b) 参数类别 多个参数时候必须加()
//{函数体}
Func<int,int ,int >  F4   = (int a, int b) => { return a + b; };

//lambda可以像普通函数去调用
Console.WriteLine(F4(10, 20));

//简化写法
Func<int, int> F6 = a => a;

//把lambda表达式应用在高级函数中
Console.WriteLine(Array.Find(ages, v => v % 2 != 0)); //找奇数的第一个匹配到的元素

2.Predicate<>

//使用Predicate<>关键字接收返回值为bool类型的lambda表达式
Predicate<int> f3 = a => a % 2 == 0;
Console.WriteLine(f3(3));//false

3.Action<>

//使用Action关键字接收无返回值的lambda表达式
//定义一个字符串参数 无返回值的lambda表达式
// 如果一个参数可以把()不写
// 如果函数体只有一句可以把{}省掉
Action<string>  f2 = (a) => Console.WriteLine(a);
f2("hell world");

二、数组排序

1.冒泡排序

冒泡排序,Bubble Sort 一个简单且常用的排序算法。因最大或最小的元素会经过交换慢慢出现在数列顶端,好似元素冒出来一样,得名“冒泡排序”。
原理

  1. 比较相邻元素:从列表的第一个元素开始,比较相邻的两个元素
  2. 交换位置:如果前一个元素比后一个元素大(升序排序时),就交换它们的位置
  3. 重复遍历:对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对
  4. 最大元素沉底:每次完整遍历后,最大的元素会"冒泡"到列表的末尾
  5. 缩小范围:忽略已经排序好的末尾部分,重复上述过程
  6. 完成排序:当没有元素需要交换时,排序完成
public static void BubbleSort(int[] ints)
{
    bool isSwap;
    for (int i = 0; i < ints.Length; i++)
    {
        isSwap = false;
        for(int j = 0; j < ints.Length - 1 - i; j++)
        {
            if (ints[j] > ints[j + 1])
            {
                (ints[j], ints[j + 1]) = (ints[j + 1], ints[j]);
                isSwap = true;
            }
        }
        if (!isSwap)
            return;
    }
}

2.选择排序

选择排序在要排序的一组数中,选出最小(或最大)的一个数与第一个位置的数交换;在剩下的数当中找最小的与第二个位置的数交换,即顺序放在已排好序的数列的最后,如此循环,直到全部数据元素排完为止
原理

  1. 查找最小值:在未排序序列中找到最小元素
  2. 交换位置:将该最小元素与未排序序列的第一个元素交换位置
  3. 缩小范围:将排序范围向后移动一位,重复上述过程
  4. 完成排序:直到所有元素都排序完毕
public static void SelectSort(int[] ints) 
{
    for (int i = 0; i < ints.Length - 1; i++)
    {
        int minIndex = i;
        for (int j = i + 1; j < ints.Length; j++)
        {
            if (ints[minIndex] > ints[j])
                minIndex = j;
        }
        if(minIndex != i)
            (ints[minIndex], ints[i]) = (ints[i], ints[minIndex]);
    }
}

更多推荐