1.数组的引用测试和数组的属性和方法
using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;
namespace _02数组的引用测试和数组的属性和方法
{
internal class Program
{
static void Main(string[] args)
{
//定义一个数组,存储10个People对象(姓名、性别、年龄)要求年
//龄随机在18-30之间,性别也是随机的 姓名也是随机的
People[] ps = new People[10];//创建10个长度的数组 存放People类型对象
Random ran = new Random(); //随机对象
//定义姓的数组
string[] xings = new string[] { "张","王","邢","陈","刘","许","马","毕","郭","李","华"};
string[] names = new string[] { "钢蛋","铁蛋","臭蛋","丫蛋","核弹","氢弹","蛋蛋" };
for (int i = 0; i < ps.Length; i++)
{
int i1 = ran.Next(0, xings.Length);//姓的随机数范围
int i2 = ran.Next (0,names.Length);// 名随机数
People p = new People(); //创建10个对象
p.Name = xings[i1] + names[i2];
p.Age = ran.Next(18, 30);
//枚举类型 ==
//ran.Next(1,3)数字类型
p.XingBie = ran.Next(1, 3) == 1 ? People.Sex.man : People.Sex.woman;
ps[i] = p;//t添加数组元素
}
//遍历所有的对象显示
for (int i = 0; i < ps.Length; i++)
{
Console.WriteLine(ps[i].Name + "\t" + ps[i].Age + "\t" + ps[i].XingBie);
}
//数组的引用测试
int[] ints = new int[] {1,2,3};
int[] ints2 = ints; //赋值关系
ints[0] = 999;
Console.WriteLine(ints2[0]);//999
Console.WriteLine(ints[0]);//999
//方法传递参数时候对数组引用测试
int[] ints3 = new int[] { 1, 2, 3 };
Test1(ints3); //i1 =ints3 赋值过程
Console.WriteLine(ints3[0]);//999
//数组的属性和方法
string[] namess = {"李易峰","吴亦凡","罗志祥","蔡徐坤" };
string[,] nas = new string[3,4];// 二维数组
Console.WriteLine(namess.Length);//32位数组长度
Console.WriteLine(namess.LongLength);//64位数字数组长度
Console.WriteLine(namess.Rank);//1维度
Console.WriteLine(nas.Rank);//2维度
//int[] 数组,凡是数组都是Array的实例
//Array.Clear(namess, 3, 1);// 从参数1数组的参数2位置删除参数3个数的元素,
//把删除的元素设置为默认值
// Array.Reverse(namess); //把数组元素颠倒位置
string[] nn = new string[10];
//Copy()复制
Array.Copy(namess,nn,4);//把参数1数组复制到参数2数组 复制参数3个数
//IndexOf() 元素所在索引值
Console.WriteLine(Array.IndexOf(namess, "蔡徐坤")+"---------"); //3
Console.WriteLine(namess[0] + namess[1] + namess[2] + namess[3]);
foreach (string item in nn) //快速遍历
{
Console.WriteLine(item);
}
Console.ReadLine();
}
static void Test1(int[] i1) //参数是一个数组
{
i1[0] = 999;
}
}
class People
{
// 枚举类型 名称Sex 定义Sex类型的变量
public enum Sex
{
man = 1, //男
woman = 2,//女
}
public string Name { get; set; } // 姓名
public Sex XingBie { get; set; }//性别枚举
public int Age { get; set; } // 年龄
}
}
2.数组的查询方法
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace _03数组的查询方法
{
internal class Program
{
static void Main(string[] args)
{
//查询目的 :通过数组查询一些满足条件(相等、不等等)的元素
//有些方法属于Array静态的方法 使用Array.方法()
//有些方法属于非静态的方法 使用对象.方法名(),需要先去创建对象
int[] ages = { 1, 2, 3, 4, 5, 6, 7, 8,20,36,29 };
//现在找到满足年龄是成年的人
//1 FindIndex():根据参数2的条件返回第一个满足条件元素的索引值,
// FindIndex()其实他的功能已经实现了遍历功能,并且把元素传递到参数2函数中
//参数1:传递数组
//参数2 是一个函数,里面代码匹配的条件,是bool返回值的 并且有一个参数
//这个参数数组里面每一个元素 例如找年龄大于18的元素的索引
Console.WriteLine(Array.FindIndex(ages, FindBig18) );//8
//Console.WriteLine(Array.FindIndex(ages, v => v%2==0 )); 下一个课件讲
Console.WriteLine(Array.FindIndex(new string[] {"张三","历史","王五","马六" },FindName));
//2 FindAll() 找到满足条件所有的元素 返回是一个数组
//参数1是数组,参数2检索条件的函数
int[] arr= Array.FindAll(ages,FindEven);
//3 ForEach()循环遍历
//参数1 遍历的数组
//参数2 是一个函数,v就是每一个元素
Array.ForEach(arr, v => Console.WriteLine(v+"--------"));
//4 Find 找到满足条件的元素
//定义方法的地方 如果方法只用在当前函数中 可以这样定义
bool FindStart(string v)
{
return v.StartsWith("ssr");
}
Console.WriteLine(Array.Find(new string[] { "ss", "ssr", "r", "a", "b" }, FindStart));
//5 FindLast() 从后面找 找到满足条件的元素
bool FindLast1(string v)
{
return v.StartsWith("ab");
}
Console.WriteLine(Array.FindLast(new string[] { "ss", "ssr", "r","ab" ,"abc", "b" }, FindLast1));
//6 TrueForAll() 元素是不是都满足一个条件,如果都满足 为true,只要一个不满足返回值为false
bool 找到所有满足条件函数(int v)
{
return v < 30;
}
Console.WriteLine(Array.TrueForAll(ages, 找到所有满足条件函数));
//7 Exists()数组里面是否存在满足条件的元素,存在一个满足条件即可
Console.WriteLine(Array.Exists(ages, 找到所有满足条件函数)); // true
//8Any() 满足条件有一个即可 等同于Array.Exist()
string[] names = new string[] { "ss", "ssr", "r", "ab", "abc", "b" };
Console.WriteLine(names.Any(FindLast1));
//9 All()所有的元素都得满足条件 整体结果为true, 等同于 Array.TrueForAll()
Console.WriteLine(names.All(FindLast1));
//10Contains() 数组是否包含这个元素
Console.WriteLine(names.Contains("abcd")+"------");
//11Concat() 串联俩个数组
string[] ss = { "2", "3" };
foreach (string item in names.Concat(ss))
{
Console.WriteLine(item+"++++++++");
}
Console.ReadKey();
}
static bool FindBig18(int v)
{
//v就是每一个元素 ages[i]
return v > 18; //如果v大于18 返回true ,如果v<=18 返回false
}
static bool FindName(string v)
{
return v =="张三";
}
static bool FindEven(int v)
{
return v % 2 == 0;
}
}
}