值型別的比較except 直接就比了
引用型別的如下:
var resultexcept = expert_itemsource.except(invert_itemsource, new mycompare()).tolist();
//比較器
public
class mycompare : iequalitycomparer
else
}public
intgethashcode(consultationexpertapimodel bx)
}
list list1 = new list();
list1.add(1);
list1.add(2);
list1.add(3);
list list2 = new list();
list2.add(3);
list2.add(4);
list2.add(5);
//得到的結果是4,5 即減去了相同的元素。
list list3 = list2.except(list1).tolist();
foreach (int i in list3)
當我們用linq操作我們自定義的對像陣列時,我們會發現有些方法直接使用的話根本不起作用,比如:distinct、except、intersect等擴充套件方法。
對於我們自定義的物件的比較,我們必須實現iequalitycomparer介面來判斷兩個物件的相等性。
示例**如下:
using system;
using system.collections.generic;
using system.linq;
using system.text;
namespace lambda
; park p2 = new park ;
park p3 = new park ;
listparks = new list(),
new park
};parks.add(p1);
parks.add(p2);
parks.add(p3);
var diff = from c in parks.distinct(new park())
select c;
foreach (var item in diff)}}
class park : iequalitycomparer
public
string address
public
int peoples
public
bool
equals(park x, park y) //比較x和y物件是否相同,按照位址比較
public
intgethashcode(park obj)
}}
下面的示例演示如何實現的相等比較器可在except
方法。
public
class product
public
int code
}class productcomparer : iequalitycomparer
public
intgethashcode(product product)
}
實現此比較器後,您可以使用的序列product
中的物件except
方法,如下面的示例中所示。
new product ,
new product };
ienumerableexcept =
fruits1.except(fruits2, new productcomparer());
foreach (var product in except)
console.writeline(product.name + " " + product.code);
/* orange 4
lemon 12
*/gethashcode是判斷物件是否相等的快速檢查,所以gethashcode不需要太複雜,因為即使gethashcode判斷相同了,後面還有equals保證精確對比。(note:但是盡量保證gethashcode就能判斷出來,太多的hash衝突,也會增加不必要的開銷。這就要看gethashcode重寫得有沒有水平了)
理解重寫gethashcode的必要性。
建議題主了解一下雜湊和雜湊表,就會知道這個雜湊碼(hashcode)是什麼東西了。
簡而言之,雜湊**是乙個用於在相等測試過程中標識物件的數值。它還可以作為乙個集合中的物件的索引。如果兩個物件的 equals 比較結果相等,則每個物件的 gethashcode 方法都必須返回同乙個值。 如果兩個物件的比較結果不相等,這兩個物件的 gethashcode 方法不一定返回不同的值。
簡而言之,如果你發現兩個物件 gethashcode() 的返回值相等,那麼這兩個物件就很可能是同乙個物件;但如果返回值不相等,這兩個物件一定不是同乙個物件。
ordercompare oc= new ordercompare();
ienumerabledifferencesequence = orderlist1.except(orderinfolist2,oc);
if (differencesequence.any())
new sendmailhelper().sendmail("[email protected]", "郵件", null, "不一致的資料",
sbuilder.tostring());
} else
//比較器
public
class ordercompare : iequalitycomparer
if (object.referenceequals(o1, null) || object.referenceequals(o2, null))
bool flag = o1.name.equals(o2.name) && o1.age.equals(o2.age) && o1.mobile.equals(o2.mobile) && o1.home.equals(o2.home) && o1.gender.equals(o2.gender);
return flag;
}public
intgethashcode(model_orderinfo oinfo)
else
} }
5 0 引用型別
ecmascript中有5中簡單資料型別 也叫基本資料型別 undefined boolean null number string。還有一種複雜資料型別 object object本質上是一組無序的明值対組成的 1 應用型別的值 物件 是引用型別的乙個例項。2 在es種,引用型別是一種資料結構,用...
6 引用型別 Object
1 例項化物件var obj new object var obj2 給物件設定屬性 obj2.name lc obj2.女 obj2.age 23 obj2 birthday 1994 03 13 obj2.say function 訪問物件的屬性或方法 console.log obj2.name...
JavaScript程式設計(三) 引用型別
函式的屬性和方法 基本包裝型別 引用型別的值 物件 是引用型別的乙個例項,ecmascript中,引用型別是一種資料結構,用於將資料和功能組織在一起,他們常被稱為類,但是並不太準確,因為它不具備傳統的物件導向語言所支援的類和介面等基本結構。引用型別也被稱為物件定義。它描述的是一類物件所具有的屬性和方...