Gibt es einen besseren, eleganteren und prägnanteren Weg, um die Schnittmenge von zwei Listen in C# zu erhalten?
In C# eine Methode zur Berechnung einer Schnittmenge von Liste von Daten ist:
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);
}
In Ruby würde man dies wie folgt tun:
def dates_common(ts1, ts2)
dt1 = ts1.dates.to_set
dt2 = ts2.dates.to_set
return dt1.intersection(dt2).to_a
end
Die Hauptursache für diese Schwerfälligkeit ist die Asymmetrie zwischen IEnumerable und konkreten Containern und Arrays.
Ich bin immer wieder erstaunt, wie schlecht die C#-Standardbibliotheken konzipiert sind, da diese Art von Problemen immer wieder auftaucht.
Gibt es eine bessere, d.h. elegantere und prägnantere Möglichkeit, dies zu tun?