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();
}

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;
}
}

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
- 3 回答
- 0 关注
- 143 浏览
添加回答
举报