我正在尝试过滤重复值的 IEnumerable 对象,因此我想从中获取不同的值,例如,假设它包含天数:
星期一 星期二 星期三 星期三
我想过滤它并返回:
星期一星期二星期三
在 .net 2.0 中执行此操作的最有效方法是什么?
我正在尝试过滤重复值的 IEnumerable 对象,因此我想从中获取不同的值,例如,假设它包含天数:
星期一 星期二 星期三 星期三
我想过滤它并返回:
星期一星期二星期三
在 .net 2.0 中执行此操作的最有效方法是什么?
Dictionary<object, object> list = new Dictionary<object, object>();
foreach (object o in enumerable)
if (!list.ContainsKey(o))
{
// Do the actual work.
list[o] = null;
}
字典将使用哈希表来保存键,因此查找是有效的。
排序最多为 O(n log(n))。具有高效散列函数的散列表通常优于它(O(1) 查找)。
制作另一个 IEnumerable。对原件进行排序。对于原始项目中的每一项,如果新项目不包含旧项目,则添加它。
另一种选择是使用 HashSet<T> - HashSet 不允许使用重复项并且不需要键/值对。