亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

C# 查詢鍵值列表并查找重復項

C# 查詢鍵值列表并查找重復項

C#
回首憶惘然 2022-06-12 10:28:30
我在 c# 中有一個列表:List<Data> uData = new List<uData>();其中 uData 從 UI 填充為:{   Id: 1,   Name: "Smith",   Input: "7,8",   Output: "Output1",   CreatedBy: "swallac",   CreatedON: "12/01/2018"},{   Id: 2,   Name: "Austin",   Input: "7,8",   Output: "Output1",   CreatedBy: "awanda",   CreatedON: "12/03/2018"},{   Id: 1,   Name: "Smith",   Input: "22,22",   Output: "Output2",   CreatedBy: "swallac",   CreatedON: "12/01/2018"},{   Id: 1,   Name: "Smith",   Input: "9,8",   Output: "Output2",   CreatedBy: "swallac",   CreatedON: "12/01/2018"},{   Id: 1,   Name: "Peter",   Input: "1,10",   Output: "Output3",   CreatedBy: "pjon",   CreatedON: "12/02/2018"}我想要做的是在“輸出”鍵上搜索這個列表,并找出“輸入”鍵的相應值是否有重復項。例如,在我上面的示例列表中,我有三個輸出:Output1、Output2、Output3?,F在對于輸出值為“Output1”的鍵的列表,相應的“輸入”鍵在此處重復。值為“7,8”。這是我要強調的。所以 Output1 具有 Output2 和 Output3 沒有的重復輸入。我可以像下面這樣首先找出輸出然后檢查值:var myList = uData.Where(p => p.Output == "Output").First();但我不會提前知道所有的輸出來檢查。有什么可以開始的輸入嗎?
查看完整描述

3 回答

?
莫回無

TA貢獻1865條經驗 獲得超7個贊

您可以獲得重復項的列表,如下所示:

var myList = uData.GroupBy(l => l.Ouput)
                  .SelectMany(g => g.GroupBy(x => x.Input).Where(x => x.Count() > 1))
                  .SelectMany(x => x);
  • 按輸出分組以獲得一系列相關項目Output

  • 用于SelectMany扁平化按輸入分組的結果,其中有重復項

  • 用于SelectMany展平為單個IEnumerable<Data>

否則,如果您只想知道是否有基于上述標準的重復項,那么您可以使用Any

var anyDuplicates = uData.GroupBy(l => l.Ouput)
                         .Any(g => g.GroupBy(x => x.Input).Any(x => x.Count() > 1));


查看完整回答
反對 回復 2022-06-12
?
慕容3067478

TA貢獻1773條經驗 獲得超3個贊

如果我正確理解您的問題,您不想搜索特定輸出,而是查找所有重復的輸出和輸入值。您可以通過對組合進行分組并過濾具有多個條目的組來做到這一點:

var duplicates = uData.GroupBy(d=>new{d.Input,d.Output}).Where(g=>g.Count() > 1)

對于您的示例,上面返回(可枚舉)一個組,其鍵為 {Output: "Output1", Input: "7,8}。(該組本身包含具有該組合的所有元素)


查看完整回答
反對 回復 2022-06-12
?
慕勒3428872

TA貢獻1848條經驗 獲得超6個贊

您可以使用查找,這將創建一個對象,您可以使用您指定的鍵進行迭代:


public class Program

{

    public static void Main(string[] args)

    {

        List<data> myList = new List<data>();

        myList.Add(new data("output1", "1,5"));

        myList.Add(new data("output2", "1,6"));

        myList.Add(new data("output1", "1,5"));

        myList.Add(new data("output1", "2,0"));


        ILookup<string, string> myLookup = myList.ToLookup(d => d.output, d => d.input);


        foreach (IGrouping<string, string> items in myLookup)

        {

            Console.WriteLine("Output : " + items.Key);

            foreach (string input in items)

            {

                Console.WriteLine("-- Input value is " + input);

            }

        }

    }

}


public class data

{

    public string output;

    public string input;


    public data(string output, string input)

    {

        this.output = output;

        this.input = input;

    }

}

輸出將如下所示:


輸出 : output1

-- 輸入值為 1,5

-- 輸入值為 1,5

-- 輸入值為 2,0

輸出 : output2

-- 輸入值為 1,6


然后您可以檢查任何兩個輸入值是否相同。


查看完整回答
反對 回復 2022-06-12
  • 3 回答
  • 0 關注
  • 293 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號