プロパティを持つEmployeeクラスを持っています。名前とIDが配列を比較するには?
です。配列があります。Employee [] A別の配列Employee [] B. 2つの配列を比較して、Bから?
プロパティを持つEmployeeクラスを持っています。名前とIDが配列を比較するには?
です。配列があります。Employee [] A別の配列Employee [] B. 2つの配列を比較して、Bから?
var intersection = A.Intersect(B).ToArray();
これはあなたがEquals
とGetHashCode
を上書きしていない限り、単に参照の比較になるだろうデフォルトIEqualityComparer<Employee>
を使用することに注意してください。あるいは、IEqualityComparer<Employee>
を実装して、のインスタンスをとるIntersect
のオーバーロードを使用することもできます。
私はそれをしました.B i'mには{API.Employee [9]}とA \t API.Employess [1]があり、実際には共通配列が1つあり、交差点はありません。 – learning
Jasonが提案するIEqualityComparerを実装しましたか? –
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();
希望:
私のような何かをするだろう。
これは 'O(n^2)'です。 – jason
http://msdn.microsoft.com/en-us/library/wdka673a.aspx別名RemoveAll()
からインスピレーションを得ることができると思います。ジェイソンの提案(IDに基づいて比較を)説明するために
...あなたがリストに配列を配置する必要がありますが、それはあなたを切り株べきではありません。
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は、別のクラス
Employee[] c = (from d in a where !b.Contains<Employee>(d) select d).ToArray<Employee>();
offtopを作成しなくても比較演算をインラインで指定することができます。たぶん "C#4.0"? : - \ – SeeSharp
@シーシャープ:これはC#4.0の共通タグです。 – jason
属性の代わりに属性を意味しますか? – Simon