[英]How to compare two lists
我有一个从以下用户那里收到的答案的列表:
List<UserAnswerToQue> lstGetUserAnswerIndex = new List<UserAnswerToQue>();
而类UserAnswerToQue如下所示:
public class UserAnswerToQue
{
int _Qu_Id;
string _Title;
public UserAnswerToQue(int qu_Id, string ans_Title)
{
_Qu_Id = qu_Id;
_Title = ans_Title;
}
}
并列出问题的真实答案:
var ListFinalTrueAnswer = (from x in FilteredTrueReceivedAnswerList
select (x.qu_Id, x.ans_Title)).ToList();
列表ListFinalTrueAnswer包含Item1和Item2
我想找到用户对问题的真实答案,为此,我需要比较两个列表lstGetUserAnswerIndex和ListFinalTrueAnswer。 如何比较这两个列表,并确定哪个答案是正确的?
使用正确答案问题的ID创建一个哈希集。 (以快速查找)
var trueAnswers = ListFinalTrueAnswer.Select(x => (x.qu_Id, x.ans_Title)).ToHashSet();
与使用哈希集过滤列表相比,
var userAnswers = lstGetUserAnswerIndex.Where(x => trueAnswers.Contains((x._Qu_Id, x._Title)));
var userTrueAnswer = lstGetUserAnswerIndex.Where(w=> ListFinalTrueAnswer.Any(a=>a.qu_Id == w.qu_Id && a.ans_Title == w.ans_Title));
首先,我们可以在课程中添加公共获取者。 这是使字段私有并由公共获取者访问其值的更好方法:
public class UserAnswerToQue {
// ...
public int Qu_Id => this._Qu_Id;
public string Title => this._Title;
// ...
}
我们的虚拟输入答案列表:
List<UserAnswerToQue> lstGetUserAnswerIndex = new List<UserAnswerToQue>() {
new UserAnswerToQue(1, "Water"),
new UserAnswerToQue(2, "Metal"),
};
第二个代码块中的ListFinalTrueAnswer实际上是一个元组列表。 可以在这里确定:
select (x.qu_Id, x.ans_Title)
因此,让我们有一个虚拟列表,它代表您的元组列表:
var ListFinalTrueAnswer = new List<Tuple<int, string>>() {
new Tuple<int, string> (1, "Water"),
new Tuple<int, string> (2, "Wood"),
};
现在我们可以检查我们的虚拟输入答案列表:
lstGetUserAnswerIndex.Where(x => ListFinalTrueAnswer.Contains(new Tuple<int, string>(x.Qu_Id, x.Title)))
这个操作很丰富,因此我们可以稍微重写一下查询:
var ListFinalTrueAnswer2 = from x in FilteredTrueReceivedAnswerList select new { x.qu_Id, x.ans_Title }
现在,我们有了一个IEnumarable匿名类。 和我们的清单比较:
lstGetUserAnswerIndex.Where(x => ListFinalTrueAnswer2.Any(y => (y.qu_Id == x.Qu_Id) && (y.ans_Title == x.Title)))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.