我在C#中有一个列表:
var list = new List<Car>();
list.AddRange(GetGreenCars());
list.AddRange(GetBigCars());
list.AddRange(GetSmallCars());问题是,一些相同的汽车会在不同的函数中返回,我不希望它们多次出现在列表中。每辆车都有一个唯一的Name属性。有没有什么办法,我可以有类似上面的东西,但只会添加项目,如果他们是唯一的?
发布于 2011-12-28 13:52:35
在这里,List<T>似乎不是合适的集合。您可能需要像HashSet这样的ISet<T>实现(如果需要排序,则可以使用SortedSet )。
要实现这一点,您需要编写一个根据Name属性定义汽车之间相等的IEqualityComparer<T>实现。如果这是汽车相等的“规范”定义,您也可以考虑直接将此定义构建到Car类型本身中(object.Equals、object.GetHashCode,理想情况下也可以实现IEquatable<T> )。
发布于 2011-12-28 13:51:57
一种选择是添加它们并删除重复的:
var list = new List<Car>();
list.AddRange(GetGreenCars());
list.AddRange(GetBigCars());
list.AddRange(GetSmallCars());
list = list.Distinct().ToList();发布于 2011-12-28 13:55:49
另一种选择是做一些类似的事情:
public static void AddUnique<T>( this IList<T> self, IEnumerable<T> items )
{
foreach(var item in items)
if(!self.Contains(item))
self.Add(item);
}
var list = new List<Car>();
list.AddUnique(GetGreenCars());
list.AddUnique(GetBigCars());
list.AddUnique(GetSmallCars());https://stackoverflow.com/questions/8652340
复制相似问题