所以我有一个班级:
public class Timing
{
public int Id { get; set; }
public double Duration { get; set; }
}
Timing类列表:
List<Timing> times = GetTimings();
所以我想从t1
中选择t2
和times
t1.Duration + t2.Duration == 20;
我如何选择这两个项目?任何想法?
答案 0 :(得分:3)
你可以这样做:
var query= from t1 in times
from t2 in times
where t1!=t2 && (t1.Duration + t2.Duration) == 20
select new {t1,t2};
如果您不想重复,请执行此操作:
var query = from index in Enumerable.Range(0, times.Count)
let t1= times[index]
from t2 in times.Skip(index + 1)
where (t1.Duration + t2.Duration) == 20
select new { t1, t2};
答案 1 :(得分:2)
您可以通过执行自连接来使用LINQ执行此操作,但由于过滤了笛卡尔积,算法将为O(n 2 )。
你可以更快地完成它 - 在O(n)中,如果你构造一个字典,将持续时间映射到对应于该持续时间的Timing
个对象列表,然后从字典中检索列表{ {1}}:
20 - t.Duration