|
发表于 2019-4-25 18:08:40
|
显示全部楼层
江苏省扬州市
似懂非懂的感觉。。。。
1、获取下列2个集合的 交集 并集 差集?
List<int> intList = new List<int> {11,12,13,14,15}
List<int> intList2 = new List<int> {14,15,16,17,18}
List<int> intList = new List<int> { 11, 12, 13, 14, 15 };
List<int> intList2 = new List<int> { 14, 15, 16, 17, 18 };
List<int> intList3 = intList.Union(intList2).ToList(); //11, 12, 13, 14, 15, 16, 17, 18
List<int> intList4 = intList.Intersect(intList2).ToList(); //14, 15
List<int> intList5 = intList.Except(intList2).ToList(); //11, 12, 13
Console.WriteLine(string.Join(",", intList5.ToArray()));
Console.Read();
2、HashSet 的插入效率真的比 List高吗(为什么)?
List申请内存是连续长度明确的,而HashSet元素是无序的、不重复的、位置固定的;
List插入和删除会引起元素位置的改变,Set不会。
3、如果一个集合要实现 foreach 循环必须实现___接口(请动手实现)?
IEnumerable接口GetEnumerator方法
static void Main(string[] args)
{
MyList<int> list = new MyList<int>()
{
Items = new int[] { 11, 12, 13, 14, 15 }
};
foreach (int item in list)
{
Console.WriteLine(item.ToString());
}
Console.Read();
}
public class MyList<T> : IEnumerable
{
public int Count => Items == null ? 0 : Items.Length;
public T[] Items { get; set; }
public T this[int pos]
{
get { return Items[pos]; }
}
IEnumerator IEnumerable.GetEnumerator() => GetEnumerator();
// public IEnumerator<T> GetEnumerator()
// {
// foreach (T item in Items)
// {
// yield return item;
// }
//此方法就不需要再写class MyEnumerator<T> : IEnumerator
//或者
public IEnumerator GetEnumerator()
{
return new MyEnumerator<T>() { List = this };
}
}
public class MyEnumerator<T> : IEnumerator
{
private int pos = -1;
public MyList<T> List { get; set; }
public void Reset()
{
pos = -1;
}
public bool MoveNext()
{
pos++;
return (pos < List.Count);
}
object IEnumerator.Current => List[pos];
} |
|