2013-05-28 957 views
2

我有花車的兩份名單,並都具有相同的大小,例如: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我想檢查是否在列表1所有項目都小於或等於比那些在list2中,例如:

2.1 < = 2.5
1.3 < = 3.3
2.2 < = 4.5
6.9 < = 7.8

在這種情況下,我希望得到結果爲true,因爲list1中的所有項都是< = list2中的項。什麼是最好的有效的方式來做到這一點?

+0

你想要什麼,如果列表的長度不同的情況發生? –

+0

是的,我想比較同一個索引值:list1 [0]與list2 [0],list1 [1]與list2 [1],....這兩個列表總是有相同的大小,在我的情況下,它是這些列表不可能有不同的大小。 – user1624552

+0

像'new List {2.1,1.3,2.2,6.9}'這樣的集合初始值設定項將不起作用,因爲您無法將'double'添加到'float'列表中。 –

回答

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); 
+0

是的,我想比較它們的配對,如上面註釋中的註釋,例如,list1 [0] <= list2 [0],list1 [1] <= list2 [1]等等。而不是x user1624552

+0

@ user1624552:對,已修復操作員。 –

+1

如果你使用'.Contains(false)'而不是'.All(x => x)',那麼你只有一個lambda。 –

0
list1.Zip(list2, (x, y) => new { X = x, Y = y }). 
     All(item => (item.X <= item.Y)) 
0
bool result = Enumerable.Range(0, list1.Count).All(i => list1[i] <= list2[i]);