各种集合
集合可分为两类:泛型集合和非泛型集合
泛型集合使用之前要先引入一个命名空间
System.Collections.Generic
非泛型集合使用之前要先引入一个命名空间
System.Collections
此外也有另一些有用的集合要引入别的命名空间
System.Collections.Specialized
ArrayList
// 实例化动态数组
ArrayList score = new ArrayList();// 向动态数组中添加元素
score.Add(90);
score.Add(85.5f);
score.Add("English:100");
// 向动态数组中批量添加元素
int[] array = { 90, 80, 70 };
score.AddRange(array);// 向动态数组中插入元素
score.Insert(2, "Math:80.5f");// 删除动态数组中的元素
score.Remove(85.5f);
// 删除的是单个元素,如果动态数组中没有该元素,就忽略
score.Remove(90);
score.Remove(90);
// 根据下标移除动态数组中的元素
score.RemoveAt(0);
score.RemoveAt(1);score.AddRange(new string[] { "A", "B", "C", "A" });
// 批量删除元素
score.RemoveRange(2,3);// 如果数组中没有该下标所对应的元素,也会出现数组越界
Console.WriteLine(score[1]);score[0] = "Math:80";
// 数组元素反转
score.Reverse();// 一般想要删除某个元素,会先进行判断是否存在
bool containsA = score.Contains("A");
// 判断数组中是否包含某个元素
Console.WriteLine("containsA:"+containsA);if (score.Contains("A"))
{
score.Remove("A");
}// 动态数组长度
Console.WriteLine("Count:"+score.Count);// 给一个元素的值,查该值在动态数组中的下标
Console.WriteLine("IndexOf:"+score.IndexOf(970));score.Clear();
score.AddRange(new float[] { 1.1f,5.7f,4.5f,9.8f,3,2,1 });
// 从小到大排序
score.Sort();// 清空动态数组
//score.Clear();Console.WriteLine("-------------------");
for (int i = 0; i < score.Count; i++)
{
Console.WriteLine(score[i]);
}Console.WriteLine("--------------------");
foreach (var item in score)
{
Console.WriteLine(item);
}
Sort
动态数组从大到小排序有两种方法
第一种
就是先Sort() 排序一遍后面再用反转 Reverse()
第二种
使用Sort的第二个重载 IComparer(接口)
class NumberSort : IComparer
{
public int Compare(object x, object y)
{
int a = (int)x; // 2
int b = (int)y; // 3
if (a>b)
{
return -1;
}
else if (a < b)
{
// a的索引编号变大了0 --> 1
// b的索引编号变小了1 --> 0
return 1;
}
else
{
return 0;
}
}
}