2016-03-24 23 views
2

Ben mesela çiftC# LINQ, eşit tüm unsurları kaldır

List<double> values = new List<double>() { 1, 2, 3, 4, 5, 6, 7 }; 

listesinin Ve yeni değerler

List<double> newVals = new List<double>() { 1, 2, 3, 9, 6, 2, 7 }; 

// Output I woud look for is 1 2 3 0 0 0 7 
Bunlar her iki eşit boyuttadır biliyorum

ama bazı alırsanız değerler değişti. LINQ ile eşit olan tüm değerleri tutabileceğimizi ancak yeni değerleri indekslerinde kaldırabileceğimizi duydum.

Except yöntemini kullanmayı denedim ancak bildiğim kadarıyla bir dizideki farklılıkları verir.

cevap

5

Zip işlevini aradığınız şey bence.

var list1 = new List<double>() { 1, 2, 3, 4, 5, 6, 7 }; 
var list2 = new List<double>() { 1, 2, 3, 9, 6, 2, 7 }; 
var result = list1.Zip(list2, (x1, x2) => x1 == x2 ? x1 : 0); // 1 2 3 0 0 0 7 

Bu iki listeyi alır basıp ifadeye argüman olarak her Listedeki eşli öğe ile bir ifade kullanarak bir sonuç seçer.

1) x1 = 1; x2 = 1; result = 1; 
... 
4) x1 = 4; x2 = 9; result = 0; 
... 
7) x1 = 7; x2 = 7; result = 7; 
+0

Teşekkür Çalışma

var result = values.Select((v, i) => v== newVals[i] ? v:0); 

, bir cazibe gibi çalıştı. –

1

Basit Linq bildirimi. Code

+0

Vay, endeksin ifadeye geçmesine izin veren 'Select' üzerinde bir aşırı yük olduğunu bilmiyordum. – Shelby115