C#LINQ - 与浮点列表比较

时间:2013-05-28 08:17:56

标签: c# linq

我有两个浮动列表,两个都有相同的大小,例如:

List<float> list1 = new List<float>{ 2.1, 1.3, 2.2, 6.9 }
List<float> list2 = new List<float>{ 2.5, 3.3, 4.5, 7.8 }

使用LINQ我想检查list1中的所有项是否小于或等于list2中的项,例如:

2.1&lt; = 2.5
1.3&lt; = 3.3
2.2&lt; = 4.5
6.9&lt; = 7.8

在这种情况下,我希望获得true作为结果,因为list1中的所有项目都是&lt; = list2中的项目。最有效的方法是什么?

3 个答案:

答案 0 :(得分:7)

听起来你想要Zip,如果真的想要成对地比较它们。 (说list1中的所有项都小于list2中的所有项,这是不正确的,例如6.9大于2.5。)

使用Zip

bool smallerOrEqualPairwise = list1.Zip(list2, (x, y) => x <= y)
                                   .All(x => x);

或者:

bool smallerOrEqualPairwise = list1.Zip(list2, (x, y) => new { x, y })
                                   .All(pair => pair.x <= pair.y);

第一个选项更有效,但第二个选项可能更具可读性。

编辑:正如评论中所指出的那样,这可能会更有效率,可能会增加可读性(更多的负面因素)。

bool smallerOrEqualPairwise = !list1.Zip(list2, (x, y) => x <= y)
                                    .Contains(false);

答案 1 :(得分:0)

list1.Zip(list2, (x, y) => new { X = x, Y = y }).
      All(item => (item.X <= item.Y))

答案 2 :(得分:0)

bool result = Enumerable.Range(0, list1.Count).All(i => list1[i] <= list2[i]);