我有一个C#集合的对象没有实现IEquatable或IComparable.我想检查集合是否包含重复的对象.即我想知道我的列表中的任何x和y的Object.ReferenceEquals(x,y)是否为false.
我该如何有效地做到这一点?
使用C#和LINQ方法会很好.
非LINQ,当您的集合实现ICollection<T>或ICollection:
bool allItemsUnique =
new HashSet<YourType>(yourCollection).Count == yourCollection.Count;
Run Code Online (Sandbox Code Playgroud)
非LINQ,当您的集合未实现ICollection<T>或ICollection.(此版本的理论性能略优于第一版,因为一旦找到重复版本,它就会提前爆发.)
bool allItemsUnique = true;
var tempSet = new HashSet<YourType>();
foreach (YourType obj in yourCollection)
{
if (!tempSet.Add(obj))
{
allItemsUnique = false;
break;
}
}
Run Code Online (Sandbox Code Playgroud)
LINQ.(此版本的最佳案例性能 - 当您的集合实现ICollection<T>或ICollection- 将与第一个非LINQ解决方案大致相同.如果您的集合未实现,ICollection<T>或者ICollectionLINQ版本效率较低.)
bool allItemsUnique =
yourCollection.Distinct().Count() == yourCollection.Count();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1417 次 |
| 最近记录: |