5. 获取序列中重复的元素序列, 原理和去重类似
/// <summary>
/// 通过对指定的值进行比较返回序列中重复的元素
/// </summary>
/// <typeparam name="T">序列中的数据类型</typeparam>
/// <typeparam name="TResult">指定的比较属性类型</typeparam>
/// <param name="source">源数据</param>
/// <param name="selector">应用于每个元素的转换函数</param>
/// <returns>一个包含源序列中的按指定元素的重复元素</returns>
public static IEnumerable<T> Identical<T>(this IEnumerable<T> source)
{
if (source == null)
throw new ArgumentNullException(nameof(source));
var setT = new HashSet<T>();
foreach (var item in source)
{
if (!setT.Add(item))
{
yield return item;
}
}
}
/// <summary>
/// 通过对指定的值进行比较返回序列中重复的元素
/// </summary>
/// <typeparam name="T">序列中的数据类型</typeparam>
/// <typeparam name="TResult">指定的比较属性类型</typeparam>
/// <param name="source">源数据</param>
/// <param name="selector">应用于每个元素的转换函数</param>
/// <returns>一个包含源序列中的按指定元素的重复元素</returns>
public static IEnumerable<T> Identical<T, TResult>(this IEnumerable<T> source, Func<T, TResult> selector)
{
if (source == null)
throw new ArgumentNullException(nameof(source));
if (selector == null)
throw new ArgumentNullException(nameof(selector));
var setTResult = new HashSet<TResult>();
foreach (var item in source)
{
var result = selector(item);
if (!setTResult.Add(result))
{
yield return item;
}
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持易采站长站。








