如何使用 linq 从 List 中删除两个属性的重复组合的对象?

与这个问题相同的问题,但我需要从 List 中删除具有两个属性的重复组合的对象。


有一组对象,对象有age和Name:


21 Carl

23 Vladimir

25 Bob

21 Olivia

21 Carl

30 Jacob

23 Vladimir

输出列表应包含:


21 Carl

23 Vladimir

25 Bob

21 Olivia

30 Jacob

如何删除它?


MMMHUHU
浏览 144回答 3
3回答

繁星淼淼

尝试这个:&nbsp; public class KeyValueClass&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; public int Age { get; set; }&nbsp; &nbsp; &nbsp; &nbsp; public string Name { get; set; }&nbsp; &nbsp; }&nbsp; &nbsp; private void DoTheJob()&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; var myList = new List<KeyValueClass>&nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; new KeyValueClass {Age = 21, Name = "Carl"},&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; new KeyValueClass {Age = 23, Name = "Vladimir"},&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; new KeyValueClass {Age = 25, Name = "Bob"},&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; new KeyValueClass {Age = 21, Name = "Olivia"},&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; new KeyValueClass {Age = 21, Name = "Carl"},&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; new KeyValueClass {Age = 30, Name = "Jacob"},&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; new KeyValueClass {Age = 23, Name = "Vladimir"},&nbsp; &nbsp; &nbsp; &nbsp; };&nbsp; &nbsp; &nbsp; &nbsp; var myDistinctList = myList.GroupBy(x => new { x.Age, x.Name })&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .Select(c => c.First()).ToList();&nbsp; &nbsp; }

拉莫斯之舞

您可以使用 Linq 命名空间中的 Distinct() 和 IEqualityComparer:class Program{&nbsp; &nbsp; static void Main(string[] args)&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; List<KeyValueClass> myList = new List<KeyValueClass>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; new KeyValueClass {Age = 21, Name = "Carl"},&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; new KeyValueClass {Age = 23, Name = "Vladimir"},&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; new KeyValueClass {Age = 25, Name = "Bob"},&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; new KeyValueClass {Age = 21, Name = "Olivia"},&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; new KeyValueClass {Age = 21, Name = "Carl"},&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; new KeyValueClass {Age = 30, Name = "Jacob"},&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; new KeyValueClass {Age = 23, Name = "Vladimir"},&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; };&nbsp; &nbsp; &nbsp; &nbsp; var myDistincList = myList.Distinct(new KeyValueEqualityComparer());&nbsp; &nbsp; &nbsp; &nbsp; foreach (var item in myDistincList) { Console.WriteLine("Age: {0}, Name:{1}", item.Age, item.Name); }&nbsp; &nbsp; &nbsp; &nbsp; Console.ReadKey();&nbsp; &nbsp; }}public class KeyValueClass&nbsp;{&nbsp; &nbsp; public int Age { get; set; }&nbsp; &nbsp; public string Name { get; set; }}class KeyValueEqualityComparer : IEqualityComparer<KeyValueClass>{&nbsp; &nbsp; public bool Equals(KeyValueClass x, KeyValueClass y)&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; if (x == null || y == null) return false;&nbsp; &nbsp; &nbsp; &nbsp; if (x.Age == y.Age && x.Name.Equals(y.Name)) return true;&nbsp; &nbsp; &nbsp; &nbsp; return false;&nbsp; &nbsp; }&nbsp; &nbsp; public int GetHashCode(KeyValueClass obj)&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; return (obj.Age + obj.Name).GetHashCode() + 387;&nbsp; &nbsp; }}

千巷猫影

只需使用 ISet 即可避免 List 的开销和性能下降:public class Person : IEquatable<Person>&nbsp;{&nbsp; &nbsp; public int Age { get; private set;}&nbsp; &nbsp; public string Name { get; private set;}&nbsp; &nbsp; public bool override Equals(Person other){&nbsp; &nbsp; &nbsp; &nbsp; return other.Age == Age && other.Name.Equals(Name);&nbsp; &nbsp; }&nbsp; &nbsp; public override int GetHashCode(){&nbsp; &nbsp; &nbsp; &nbsp; return Age.GetHashCode() ^ Name.GetHashCode();&nbsp; &nbsp; }}private IEnumerable<Person> MakeUniqueList(IEnumerable<Person> input){&nbsp; &nbsp; 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
打开App,查看更多内容
随时随地看视频慕课网APP