有没有更好、更优雅、更简洁的方法在C#中获取两个列表的交集?
在C#中计算日期列表交集的方法是:
public List<DateTime> dates_common(Timeserie ts1, Timeserie ts2)
{
var dt1 = new HashSet<DateTime>(ts1.dates);
var dt2 = new HashSet<DateTime>(ts2.dates);
dt1.IntersectWith(dt2);
var dt = new DateTime[dt1.Count];
dt1.CopyTo(dt);
return new List<DateTime>(dt);
}
在 Ruby 中,我们可以这样做:
def dates_common(ts1, ts2)
dt1 = ts1.dates.to_set
dt2 = ts2.dates.to_set
return dt1.intersection(dt2).to_a
end
这种笨拙的原因在于IEnumerable和具体容器和数组之间的不对称性。我经常惊讶于C#标准库设计得如此糟糕,以至于这种问题一直存在。
是否有更好的方式来解决这个问题?更好指的是更优雅、更简洁的方式。