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

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

如何使用 linq 從 List 中刪除兩個屬性的重復組合的對象?

如何使用 linq 從 List 中刪除兩個屬性的重復組合的對象?

C#
MMMHUHU 2022-07-10 10:30:32
與這個問題相同的問題,但我需要從 List 中刪除具有兩個屬性的重復組合的對象。有一組對象,對象有age和Name:21 Carl23 Vladimir25 Bob21 Olivia21 Carl30 Jacob23 Vladimir輸出列表應包含:21 Carl23 Vladimir25 Bob21 Olivia30 Jacob如何刪除它?
查看完整描述

3 回答

?
繁星淼淼

TA貢獻1775條經驗 獲得超11個贊

嘗試這個:


  public class KeyValueClass

    {

        public int Age { get; set; }

        public string Name { get; set; }

    }


    private void DoTheJob()

    {


        var myList = new List<KeyValueClass>

        {

            new KeyValueClass {Age = 21, Name = "Carl"},

            new KeyValueClass {Age = 23, Name = "Vladimir"},

            new KeyValueClass {Age = 25, Name = "Bob"},

            new KeyValueClass {Age = 21, Name = "Olivia"},

            new KeyValueClass {Age = 21, Name = "Carl"},

            new KeyValueClass {Age = 30, Name = "Jacob"},

            new KeyValueClass {Age = 23, Name = "Vladimir"},

        };


        var myDistinctList = myList.GroupBy(x => new { x.Age, x.Name })

            .Select(c => c.First()).ToList();

    }


查看完整回答
反對 回復 2022-07-10
?
拉莫斯之舞

TA貢獻1820條經驗 獲得超10個贊

您可以使用 Linq 命名空間中的 Distinct() 和 IEqualityComparer:


class Program

{

    static void Main(string[] args)

    {



        List<KeyValueClass> myList = new List<KeyValueClass>

            {

                new KeyValueClass {Age = 21, Name = "Carl"},

                new KeyValueClass {Age = 23, Name = "Vladimir"},

                new KeyValueClass {Age = 25, Name = "Bob"},

                new KeyValueClass {Age = 21, Name = "Olivia"},

                new KeyValueClass {Age = 21, Name = "Carl"},

                new KeyValueClass {Age = 30, Name = "Jacob"},

                new KeyValueClass {Age = 23, Name = "Vladimir"},

            };


        var myDistincList = myList.Distinct(new KeyValueEqualityComparer());


        foreach (var item in myDistincList) { Console.WriteLine("Age: {0}, Name:{1}", item.Age, item.Name); }


        Console.ReadKey();

    }

}



public class KeyValueClass 

{

    public int Age { get; set; }

    public string Name { get; set; }

}




class KeyValueEqualityComparer : IEqualityComparer<KeyValueClass>

{

    public bool Equals(KeyValueClass x, KeyValueClass y)

    {

        if (x == null || y == null) return false;

        if (x.Age == y.Age && x.Name.Equals(y.Name)) return true;

        return false;

    }


    public int GetHashCode(KeyValueClass obj)

    {

        return (obj.Age + obj.Name).GetHashCode() + 387;

    }

}


查看完整回答
反對 回復 2022-07-10
?
千巷貓影

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

只需使用 ISet 即可避免 List 的開銷和性能下降:


public class Person : IEquatable<Person> 

{

    public int Age { get; private set;}

    public string Name { get; private set;}


    public bool override Equals(Person other){

        return other.Age == Age && other.Name.Equals(Name);

    }


    public override int GetHashCode(){

        return Age.GetHashCode() ^ Name.GetHashCode();

    }

}


private IEnumerable<Person> MakeUniqueList(IEnumerable<Person> input){

    return new HashSet<Person>(input);

}

為了實際刪除,這將是相當緩慢的性能明智(但它會節省內存使用),使用 List.Remove(T) https://docs.microsoft.com/en-us/dotnet/api/system。 collections.generic.list-1.remove?view=netframework-4.7.2


查看完整回答
反對 回復 2022-07-10
  • 3 回答
  • 0 關注
  • 167 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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