一、问题的提出
有一个对话框,用户可以乱序选择6个指定的item,然后提交,那么如何判断他选的对不对。
你是用 listA.Equals(listB)
还是用 listA.SequenceEqual(listB)
或者用 setA.SetEquals(setB)
......
二、【列表相等】与【集合相等】
计科1班有50个学生,第一节课他们在教室A上课,座位顺序为S1,第二节课他们在教室B上课,重新争抢了座位,座序变了,记为S2。
问题1:这两节课中的上课同学都是计科1班的吗?——这是一个集合比较的问题
问题2:两节课的座位顺序相等吗——这是一个列表相等的问题
S1 = ["王同学","张同学",......]
S2 = ["张同学","王同学",......]
肯定不相等嘛
三、列表中的元素如何在集合意义上相等
关键步骤:列表--->Set,然后比较Set,本处使用HashSet,然后调用SetEquals
/// <summary>
/// 判断两个list中的元素集合是否相等{数学中集合相等的概念}
/// </summary>
/// <typeparam name="T">list的item 类型</typeparam>
/// <param name="list1">列表1</param>
/// <param name="list2">列表2</param>
/// <returns>true:相等,false:不等</returns>
bool ListEquals<T>(List<T> list1,List<T> list2)
{
return new HashSet<T>(list1).SetEquals(list2); ;
}
四、测试代码
// Update is called once per frame
void Update()
{
if (Input.GetKeyDown(KeyCode.Return))
{
//判断两个list中的集合元素是否相等:先变成集合Set,再检测
List<string> list1 = new List<string>();
list1.Add("a");
list1.Add("c");
list1.Add("b");
List<string> list2 = new List<string>();
list2.Add("b");
list2.Add("c");
list2.Add("a");
Debug.Log($"list1.Equals(list2) = {list1.Equals(list2)}");
Debug.Log($"list1.SequenceEqual(list2) = {list1.SequenceEqual(list2)}");
Debug.Log($"ListEquals(list1,list2) = {ListEquals(list1,list2)}");
List<int> list3 = new List<int>();
list3.Add(1);
list3.Add(2);
list3.Add(3);
List<int> list4 = new List<int>();
list4.Add(3);
list4.Add(2);
list4.Add(1);
Debug.Log($"list3.Equals(list4) = {list3.Equals(list4)}");
Debug.Log($"list3.SequenceEqual(list4) = {list3.SequenceEqual(list4)}");
Debug.Log($"ListEquals(list3, list4) = {ListEquals(list3, list4)}");
}
}
测试结果: