我有两个浮动列表,两个都有相同的大小,例如:
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中的项目。最有效的方法是什么?
答案 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]);