一、自定义迭代器
class Iterator
{
private int[] Nums;
public Iterator(int[] nums)
{
Nums = nums;
}
public int index = -1;
public bool MoveNext()
{
index++;
return index < Nums.Length;
}
public int Current
{
get
{
return Nums[index];
}
}
}
class MyList3 : IEnumerable
{
private int[] nums { set; get; }
public MyList3(int n)
{
//构造函数
nums = new int[n];
//创建随机数对象
var random = new Random();
for (int i = 0; i < n; i++)
{
//1-10之间的随机数
nums[i] = random.Next(1, 10);
}
}
//每次调用创建一个新的迭代器
public Iterator GetIterator()
{
return new Iterator(nums);
}
public IEnumerator GetEnumerator()
{
//throw new NotImplementedException();
foreach (var i in nums)
{
yield return i;
}
}
}
class lteratorDemo
{
MyList3 list = new MyList3(5);
var l1 = list.GetIterator();
while (l1.MoveNext())
{
Console.WriteLine(l1.Current);
var l2 = list.GetIterator();
while (l2.MoveNext())
Console.WriteLine("\t"+l2.Current);
}
}
二、实现IEnumerable迭代器
-
实现IEnumerable接口,实现里面的迭代方法
-
自定义迭代器类
class Iterator
{
private int[] Nums;
public Iterator(int[] nums)
{
Nums = nums;
}
public int index = -1;
public bool MoveNext()
{
index++;
return index < Nums.Length;
}
public int Current
{
get
{
return Nums[index];
}
}
}
- 实现IEnumerable接口
class MyList12 : IEnumerable
{
private int[] nums { set; get; }
public MyList12(int n)
{
//构造函数
nums = new int[n];
//创建随机数对象
var random = new Random();
for (int i = 0; i < n; i++)
{
//1-10之间的随机数
nums[i] = random.Next(1, 10);
}
}
//每次调用创建一个新的迭代器
public Iterator GetIterator()
{
return new Iterator(nums);
}
public IEnumerator GetEnumerator()
{
//throw new NotImplementedException();
foreach (var i in nums)
{
yield return i;
}
}
}
yield return 顺序返回 yieId break
三、常用集合
链表结构:var list = new List();
//初始化集合参数
var list = new List<int>()
{
1,5,7,10
};
哈希表结构: Dictionary<key,value> === (Java)Map<key,value>
var map = new Dictionary<string, object>();
map.Add("zhangsan",11);
map.Add("李四","12");
//使用key来获取value
Console.WriteLine(map["zhangsan"]);
//map获取迭代器然后遍历
var m = map.GetEnumerator();
while (m.MoveNext())
{
Console.WriteLine(m.Current);
}
IComparable可以用来比较两个数值是否一致