C#自定义集合和常用集合

it2023-10-03  74

自定义集合

自定义集合以及迭代器的理解:

class MyList { private int[] Nums { get; set; } private int index = -1; public MyList(int n ) { Nums = new int[n]; var temp = new Random(); for (int i = 0; i < n; i++) { Nums[i] = temp.Next(1, 10); } } internal bool MoveNext() { index++; return index < Nums.Length; } internal int Current { get { return Nums[index]; } } } class Program { static void Main(string[] args) { var list = new MyList(5); while (list.MoveNext()) { Console.WriteLine(list.Current); } } } //此时迭代器(index)的维护在MyList类内部,于是出现了一个问题:如果需要双重循环遍历(三重、四重...),index将无法支持 class Enumrator { public Enumrator(int[] nums) { Nums = nums; } private int[] Nums = null; private int index = -1; internal bool MoveNext() { index++; return index < Nums.Length; } internal int Current { get { return Nums[index]; } } } class MyList { private int[] Nums { get; set; } public MyList(int n ) { Nums = new int[n]; var temp = new Random(); for (int i = 0; i < n; i++) { Nums[i] = temp.Next(1, 10); } } public Enumrator GetEnumrator() { return new Enumrator(Nums); } } class Program { static void Main(string[] args) { var list = new MyList(5); var e1 = list.GetEnumrator(); while (e1.MoveNext()) { Console.WriteLine(e1.Current); var e2 = list.GetEnumrator(); while (e2.MoveNext()) { Console.WriteLine("\t" + e2.Current); } } Console.Read(); } } //一个类实现了IEnumerable接口,那么这个类就就是集合 class MyList:IEnumerable<int> { private int[] Nums { get; set; } public MyList(int n ) { Nums = new int[n]; var temp = new Random(); for (int i = 0; i < n; i++) { Nums[i] = temp.Next(1, 10); } } public IEnumerator<int> GetEnumerator() { foreach (var i in Nums) { yield return i; } } IEnumerator IEnumerable.GetEnumerator() { return GetEnumerator(); } } class Program { static void Main(string[] args) { var list = new MyList(5); foreach (var i in list) { Console.WriteLine(i); foreach (var i2 in list) { Console.WriteLine("\t" + i2); } } Console.Read(); } } ```
最新回复(0)