2

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

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 <= 2.5
1.3 <= 3.3
2.2 <= 4.5
6.9 <= 7.8

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

4

3 回答 3

7

听起来你想要Zip,如果你真的想成对比较这些。(不能说 in 中的所有项目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);
于 2013-05-28T08:20:33.830 回答
0
list1.Zip(list2, (x, y) => new { X = x, Y = y }).
      All(item => (item.X <= item.Y))
于 2013-05-28T08:20:44.597 回答
0
bool result = Enumerable.Range(0, list1.Count).All(i => list1[i] <= list2[i]);
于 2013-05-28T08:21:07.373 回答