iha*_*ems 4 c# ruby intersection list
是否有更好,更优雅和简洁的方法来获得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);
}
Run Code Online (Sandbox Code Playgroud)
在Ruby中,可以这样做:
def dates_common(ts1, ts2)
dt1 = ts1.dates.to_set
dt2 = ts2.dates.to_set
return dt1.intersection(dt2).to_a
end
Run Code Online (Sandbox Code Playgroud)
这种笨拙的根本原因是IEnumerable和具体容器和数组之间的不对称性.
我不断惊讶于C#标准库的设计非常糟糕,因为这种问题一直存在.
有没有更好的,这意味着更优雅和简洁,这样做的方式?
dtb*_*dtb 17
您可以使用Enumerable.Intersect和Enumerable.ToList 扩展方法,以获得非常优雅和简洁的代码:
public List<DateTime> dates_common(Timeserie ts1, Timeserie ts2)
{
return ts1.dates.Intersect(ts2.dates).ToList();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7743 次 |
| 最近记录: |