Tento článek je zrcadlovým článkem o strojovém překladu, klikněte zde pro přechod na původní článek.

Pohled: 24681|Odpověď: 1

[Zdroj] C# Distinct podmíněně deduplikuje objekty

[Kopírovat odkaz]
Zveřejněno 17.08.2018 10:56:00 | | | |
Obvykle používáme Distinct v C# pro deduplikaci polí, obecné datové typy založené na polích, jako je int, string. lze také použít pro deduplikaci objektů, podívejme se na definici metody Distinct v C#:



Je zde velké zatížení, přidává se první parametr, což je metoda rozšiřování, o metodě rozšiřování, prosím, Baidu pochop.
Pojďme studovat deduplikaci objektů v Distinct, řekněme, že nyní máme třídu People:




Deklarujeme kolekci objektů ListPeole:

Použijme metodu Distinct na ListPeople bez jakýchkoli parametrů a výsledek je následující:



Je vidět, že pokud metoda Distinct nemá parametry, deduplikuje p, p1, p2 v množině objektů a neexistuje deduplikace pro různé objekty se stejnou hodnotou člena objektu.
Nyní máme požadavek, aby lidé se stejným ID, počítáme jako stejná osoba, vypisovali ne-duplicitní osoby v sadě (stačí vydat jednu pro stejné ID), v tuto chvíli používáme druhou metodu Distinct, která vyžaduje, aby parametry předané byly typu IEqualityComparer, dědí obecné rozhraní, přidáváme následující kód:


Děděním rozhraní IEqualityComparer musíte implementovat metody Equals a GetHashCode.
Při porovnání můžeme vložit entitu s PeopleCompareByID:


Výsledky závodu jsou následující:



Dosáhli jsme efektu deduplikace pomocí ID.
Nyní se požadavky opět změnily, ID a provincie jsou jedna osoba, která může vygenerovat informace o osobě (ta samá může vydat informace podle libosti), v tuto chvíli vidíme, že ID=0 a Province="Hubei" jsou duplikovány, pro deduplikaci máme další třídu, nebo dědíme z IEqualityComparer:


Podobně při použití metody Distinct je předána instance PeopleCompareByIDAndProvince:

Výsledky po běhu jsou následující:



Dosáhli jsme požadovaného efektu.
Tato metoda může být použita při problému deduplikace u tří nebo více členů objektu, aby se zjistilo, zda je objekt duplikován.
Výše uvedené je můj skromný názor.






Předchozí:MYSQL:WARN: Establishing SSL connection without server's identity verificatio...
Další:C# Hluboký ponor - Destructors
Zřeknutí se:
Veškerý software, programovací materiály nebo články publikované organizací Code Farmer Network slouží pouze k učení a výzkumu; Výše uvedený obsah nesmí být používán pro komerční ani nelegální účely, jinak nesou všechny důsledky uživatelé. Informace na tomto webu pocházejí z internetu a spory o autorská práva s tímto webem nesouvisí. Musíte výše uvedený obsah ze svého počítače zcela smazat do 24 hodin od stažení. Pokud se vám program líbí, podporujte prosím originální software, kupte si registraci a získejte lepší skutečné služby. Pokud dojde k jakémukoli porušení, kontaktujte nás prosím e-mailem.

Mail To:help@itsvse.com