这里将详细解释: 我有
public class Season
{
#region Public Variables
private int _id;
private string _seasonName;
private int _startMonth;
#endregion
#region Public Properties
public int Id
{
get { return _id; }
set { _id = value; }
}
public int StartMonth
{
get { return _startMonth; }
set { _startMonth = value; }
}
public string SeasonName
{
get { return _seasonName; }
set { _seasonName = value; }
}
#endregion
#region Public Constructor
public Season()
{
this._initialize();
}
public Season(string pSeasonName, int _pStartMonth,int pID)
{
this._initialize(pSeasonName, _pStartMonth, pID);
}
#endregion
}
接下来我有如下所示
IList<Season> seaosns = new List<Season>();
seaosns.Add(new Season("Summer", 4, 1));
seaosns.Add(new Season("Winter", 6, 2));
seaosns.Add(new Season("MidSummer", 10, 1));
如果在Ilist Items中重复了Ids,我需要检查一下。这可以通过使用For循环来完成,但需要知道是否还有其他解决方案。
先谢谢。
答案 0 :(得分:4)
使用HashSet代替列表!集合是一个不包含重复元素的集合,其元素没有特定的顺序。您可以提供自定义IEqualityComparer来确定您的季节的唯一性。
var seaosns = new HashSet<Season>(seasonsEqualityComparer);
seaosns.Add(new Season("Summer", 4, 1));
seaosns.Add(new Season("Winter", 6, 2));
seaosns.Add(new Season("MidSummer", 10, 1)); // returns false...
答案 1 :(得分:4)
最合适的方法是使用唯一属性(Dictionary<int,Season>
)作为字典中的键,将项目(代替或另外)存储在Id
中。然后你有一个O(1)
查找来测试存在,并按键(Id
)获取。但请注意,词典 未订购 - 这意味着,它不保证要遵守广告订单或键盘顺序。订单未定义 - 因此,如果您按特定顺序需要它们,则可能需要单独保留它。
答案 2 :(得分:3)
您可以使用IDictionary
代替IList
,但不允许使用重复键。您可以使用Season.Id
作为密钥。使用Lookup
将允许您复制元素,因此您可以迭代键并检查与其关联的元素数量。
答案 3 :(得分:0)
如果您只想检查,请尝试以下操作:
var hasDuplicates = list.GroupBy(season => season.Id).Any(groupping => groupping.Count() > 1);
但是如果你想获得集合,那么最初没有重复,使用HashSet或Dictionary,就像其他人所说的那样,或者从Collection中创建不允许添加重复项的子类。