簡體   English   中英

如何比較兩個清單

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM