Есть ли лучший, более элегантный и лаконичный способ пересечения двух списков в 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 #, так как подобные проблемы возникают постоянно.
Есть ли лучший, то есть более элегантный и лаконичный способ сделать это?