Ilist / List
IList:首先IList 泛型接口是 ICollection 泛型接口的子代,并且是所有泛型列表的基接口。
它仅仅是所有泛型类型的接口,并没有太多方法可以方便实用,如果仅仅是作为集合数据的承载体,确实,IList<T>可以胜任。
不过,更多的时候,我们要对集合数据进行处理,从中筛选数据或者排序。这个时候IList<T>就爱莫能助了。
1、当你只想使用接口的方法时,ILis<>这种方式比较好.他不获取实现这个接口的类的其他方法和字段,有效的节省空间.
2、IList <>是个接口,定义了一些操作方法这些方法要你自己去实现
List <>是泛型类,它已经实现了IList <>定义的那些方法
IList <Class1> IList11 =new List <Class1>();
List <Class1> List11 =new List <Class1>();
这两行代码,从操作上来看,实际上都是创建了一个List<Class1>对象的实例,也就是说,他们的操作没有区别。
只是用于保存这个操作的返回值变量类型不一样而已。
那么,我们可以这么理解,这两行代码的目的不一样。
List <Class1> List11 =new List <Class1>();
是想创建一个List<Class1>,而且需要使用到List<T>的功能,进行相关操作。
而
IList <Class1> IList11 =new List <Class1>();
只是想创建一个基于接口IList<Class1>的对象的实例,只是这个接口是由List<T>实现的。所以它只是希望使用到IList<T>接口规定的功能而已。
List基础、常用方法
using System;
using System.Collections.Generic;
namespace ListStudy
{
/// <summary>
/// 以下没有接收返回值的方法都是属于 void方法
/// </summary>
class Program
{
static void Main(string[] args)
{
List<string> lists = new List<string>();
/* 添加元素 */
//添加一个元素
lists.Add("first");
//添加多个元素
string[] temArr = { "two", "three" };
lists.AddRange(temArr);
//在index位置添加一个元素
lists.Insert(0, "zero");
//遍历List中元素
foreach (string item in lists)
{
Console.Write(item + "/");
}
//结果为:zero/first/two/three/
/* 删除元素 */
//删除一个值
bool remove = lists.Remove("first1");
//删除下表为index的元素
lists.RemoveAt(3); //超出下标会报异常
//从下标index开始,删除count个元素
lists.RemoveRange(2, 1); //超出下标或者个数超出list长度都会报异常
/* 判断某个元素是否在list中 */
bool contains = lists.Contains("firsT");//属于精确查找匹配,不是模糊匹配
Console.WriteLine(contains);
/* 元素排序 */
lists.Sort(); //默认是元素第一个字母按升序
//给List里面元素顺序反转
lists.Reverse(); //注意这个需要与sort一起使用
/* list清空 */
lists.Clear();
/* list获取元素个数 */
int count = lists.Count;
/* list lambda表达式 */
string[] temArr1 = { "zero", "first", "two", "three" };
lists.AddRange(temArr1);
string s = lists.Find(name =>
{
if (name.Contains("w"))
{
return true;
}
else
{
return false;
}
}); //返回第一个模糊匹配的元素
//以下方法都可以使用这种方式
//List<string> ss = lists.FindAll();
//List<string> ss = lists.FindLast(); //返回最后一个模糊匹配的元素
//bool trueForAll = lists.TrueForAll(); //确定是否 List 中的每个元素都与指定的谓词所定义的条件相匹配。比如是否每个元素的长度都超过了3
//IEnumerable<string> takeList= mList.Take(5); //获得前n行 返回值为IEnumetable<T>,T的类型与List<T>的类型一样
//IEnumerable<string> ss = lists.Where(); //检索与指定谓词所定义的条件相匹配的所有元素。跟List.FindAll方法类似。
//int num = lists.RemoveAll(); //移除与指定的谓词所定义的条件相匹配的所有元素。并返回移除的数量
Console.Write($"s:{s}");
}
}
}
数组
using System;
namespace ListStudy
{
class Program
{
static void Main(string[] args)
{
//创建数组的几种方法
//第一种
string[] myArray = new string[10];
//第二种
string[] myArray2 = { "first", "two" };
//第三种
string[] myArray3 = new string[3] { "first", "two", "there" };
//第四种
string[] myArray4 = new string[] { "first", "two", "there", "four" };
//数组排序
Array.Sort(myArray4);
}
}
}
Array类方法
using System;
namespace ListStudy
{
class Program
{
static void Main(string[] args)
{
int[] list = { 34, 72, 13, 44, 25, 30, 10 };
Console.Write("原始数组: ");
foreach (int i in list)
{
Console.Write(i + " ");
}
Console.WriteLine();
// 逆转数组
Array.Reverse(list);
Console.Write("逆转数组: ");
foreach (int i in list)
{
Console.Write(i + " ");
}
Console.WriteLine();
// 排序数组
Array.Sort(list);
Console.Write("排序数组: ");
foreach (int i in list)
{
Console.Write(i + " ");
}
Console.WriteLine();
int[] list1 = new int[3];
Array.Copy(list, list1, 3);// 源数组,目标数组, 复制长度
Console.Write("Copy数组: ");
foreach (int i in list1)
{
Console.Write(i + " ");
}
Console.WriteLine();
int[] list2 = new int[3];
Array.Copy(list, 3, list2, 0, 3);// 源数组,从源数组第几个下标index开始复制,目标数组, 从目标数组的第几个下表index开始放值, 复制长度
Console.Write("Copy数组: ");
foreach (int i in list2)
{
Console.Write(i + " ");
}
Console.WriteLine();
Console.ReadKey();
}
}
}
List 与 数组之间的相互转换
using System.Collections.Generic;
namespace ListStudy
{
class Program
{
static void Main(string[] args)
{
//数组转List
string[] temArr1 = { "zero", "first", "two", "three" };
List<string> lists = new List<string>(temArr1);
//List转数组
List<int> listss = new List<int>() { 1, 2, 3, 4, 5 };
int[] temArray2 = listss.ToArray();
}
}
}