小编iha*_*ems的帖子

列表的交集

是否有更好,更优雅和简洁的方法来获得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#标准库的设计非常糟糕,因为这种问题一直存在.

有没有更好的,这意味着更优雅和简洁,这样做的方式?

c# ruby intersection list

4
推荐指数
1
解决办法
7743
查看次数

标签 统计

c# ×1

intersection ×1

list ×1

ruby ×1