2017-11-06 8 views
0

私は2つの値/ xとyのリスト/配列を持っています。 xリストに重複があります。私は一意のx値を持つxとyの要素を選択する必要があります。 LINQを使って、xとyの要素を得るためのクエリを書く方法は?xは一意です。 (私はすべての別個のxの最初のyが欲しい)。LINQ:最初のリストが異なる場合、2つのリストを選択して要素を選択する方法は?

例:私が欲しい

x = {1, 1, 2, 3, 4, 4, 5, 6} 

y = {3, 4, 5, 6, 7, 8, 9, 10} 

結果は次のとおりです。

newX = {1, 2, 3, 4, 5, 6} 

newY = {3, 5, 6, 7, 9, 10} 
+0

@ usere3450049の回答はどれですか? – mjwills

答えて

2

あなたはインデックスを持つ最初のxを得ることができ、その後、yのインデックスのためのルックアップ。

var xWithIndex = x.Select((value, index) => new { Value = value, Index = index }) 
     .GroupBy(item => item.Value) 
     .Select(group => group.First()) 
var newX = xWithIndex.Select(item => item.Value).ToList(); 
var newY = xWithIndex.Select(item => y[item.Index]).ToList(); 
0

あなたは、これがDistinctByを使用して達成することができるMoreLINQを追加して喜んでいる場合:

int[] x = { 1, 1, 2, 3, 4, 4, 5, 6 }; 
int[] y = { 3, 4, 5, 6, 7, 8, 9, 10 }; 

var result = x.Zip(y, (a,b) => new { x = a, y = b}) 
    .DistinctBy(z => z.x).ToList(); 

var xresult = result.Select(z => z.x); 
var yresult = result.Select(z => z.y); 

// Verify the results 
Console.WriteLine(String.Join(",", xresult)); 
Console.WriteLine(String.Join(",", yresult)); 
1

ジップ2このようなリスト、xでグループ、および各グループから最初の項目を選択し、:

var pairs = x.Zip(y, (first, second) => new {X = first, Y = second}) 
    .GroupBy(i => i.X) 
    .Select(g => g.First()); 
var newX = pairs.Select(p => p.X).ToList(); 
var newY = pairs.Select(p => p.Y).ToList(); 
関連する問題