2011-01-21 10 views
0

プロパティを持つEmployeeクラスを持っています。名前とIDが配列を比較するには?

です。配列があります。Employee [] A別の配列Employee [] B. 2つの配列を比較して、Bから?

+0

offtopを作成しなくても比較演算をインラインで指定することができます。たぶん "C#4.0"? : - \ – SeeSharp

+0

@シーシャープ:これはC#4.0の共通タグです。 – jason

+0

属性の代わりに属性を意味しますか? – Simon

答えて

7
var intersection = A.Intersect(B).ToArray(); 

これはあなたがEqualsGetHashCodeを上書きしていない限り、単に参照の比較になるだろうデフォルトIEqualityComparer<Employee>を使用することに注意してください。あるいは、IEqualityComparer<Employee>を実装して、のインスタンスをとるIntersectのオーバーロードを使用することもできます。

+0

私はそれをしました.B i'mには{API.Employee [9]}とA \t API.Employess [1]があり、実際には共通配列が1つあり、交差点はありません。 – learning

+0

Jasonが提案するIEqualityComparerを実装しましたか? –

0

System.Collections.Genericを使用できますか?助け

var listA = new List<Employee>(A); 
var listB = new List<Employee>(B); //not sure if arrays implement contains, may not need this line 

A = listA.where(e => listB.Contains(e)).toArray(); 

希望:

私のような何かをするだろう。

+0

これは 'O(n^2)'です。 – jason

0

...あなたがリストに配列を配置する必要がありますが、それはあなたを切り株べきではありません。

class IDEmployeeComparer : IEqualityComparer<Employee> 
{ 
    public bool Equals(Employee first, Employee second) 
    { 
     return (first.ID == second.ID); 
    } 

    public int GetHashCode(Employee employee) 
    { 
     return employee.ID 
    } 
} 

...

var intersection = A.Intersect(B, new IDEmployeeComparer()).ToArray(); 
"#-4.0 C" 奇妙タグ:

Jon Skeet's misc libraryは、別のクラス

0
Employee[] c = (from d in a where !b.Contains<Employee>(d) select d).ToArray<Employee>();