ソス@ソスソスGenerics.Collections.TDictionaryソス@ソスフ ContainsValue
|
ソスEC/C++
ソスEDelphi
ソスEVisual BasicソスソスソスSソスソス
ソス@(VB2-VB6ソスソス.NETソスソスソスp)
ソスEVisual Basic(VB2-VB6)
ソスEVisual Basic .NET
ソスEVisual C++
ソスEpapy's softwarelibrary
ソスWソスLソスフ鯉ソスソスAソスGソスソスソスoソスJソスfソスソスソスフサソスソスソスvソスソスソスソスGソスソスソストみてゑソスソスソスソスナゑソスソスソスソスAContainsValueソスフ難ソスソスがソス謔ュソスかソスソスワゑソスソスソスB
ソスソスソスソスソストゑソスソスソスソスソスソスソスソスネゑソスソスナゑソスソス蛯、ソスソスソスH
D2010,WinXpSp3ソスナゑソスソスB
uses ソスEソスEソスEGenerics.Collections
type
TCity = record
Country : string;
Latitude : Integer;
Longitude : Integer;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
Dictionary : TDictionary<String, TCity>;
City,City2 : TCity;
exist : boolean;
begin
Dictionary := TDictionary<String, TCity>.Create;
Dictionary.Clear;
Button1.Caption := Dictionary.ToString;
City.Country := 'ソスCソスMソスソスソスX';
City.Latitude := 515;
City.Longitude := -17;
Dictionary.Add('ソスソスソスソスソスhソスソス', City);
exist := Dictionary.ContainsValue(City);
ShowMessage(BoolToStr(exist, true));
// FalseソスEソスEソスEソスネゑソスソスHソスH
City2 :=Dictionary.Items['ソスソスソスソスソスhソスソス'];
exist := Dictionary.ContainsValue(City2);
ShowMessage(BoolToStr(exist, true));
// True
if ( City.Country = City2.Country ) and
( City.Latitude = City2.Latitude ) and
( City.Longitude = City2.Longitude )
then
ShowMessage('ソスソスソスソス')
else
ShowMessage('ソス痰、');
//ソスソスソスソス
Dictionary.Destroy;
end;
ソス闌ウソスソスDelphiソスソスソスネゑソスソスフで予ソスzソスナゑソスソスソスソスB
ソスソスソスgソスソスソスソスソスソスソスナゑソスAソスCソスソスソスXソス^ソスソスソスXソスソスソス痰、ソスソスソス゚ゑソスFalseソスネのでは?
TCityソスノ、EqualソスソスソスZソスq(NotEqualソスソスソスZソスqソスソスHソスjソスソスIソス[ソスoソス[ソスソスソスCソスhソスソスソストゑソスソスニ幸ソスソスソスノなるかソスソスナゑソスソスB
AddソスソスTDictionaryソスソスノ格ソス[ソスソスソスソスソスロ、Cityソスソスソスフゑソスフではなゑソスソスソスソスフコソスsソス[ソスソスソスiソス[ソスソスソスソスワゑソスソスB
ソスソスソスフ趣ソスソス_ソスソスCityソスソスDictionary['ソスソスソスソスソスhソスソス']ソスヘ別包ソスソスノなゑソスワゑソスソスB
ソスソスソスソスナ、City2ソスソスDictionary['ソスソスソスソスソスhソスソス']ソスソスソスフゑソスフゑソスソスヤゑソスソスソス驍スソス゚難ソスソスソスノなゑソスワゑソスソスB
ソスワゑソスソスATDictionaryソスソスTValueソスフ費ソスrソスヘ外ソスソスソスソスソスソスソスrソスソスソス@ソスソスpソスモゑソスソスソスソスiソスソスソスネゑソスソスA
ソスソスソスソスソスIソスソスTEqualityComparer<TValue>.Defaultソスソスソスソスrソスヨ撰ソスソスニゑソスソスト使ソスpソスソスソスソスワゑソスソスB
ソスソスソスソスソスrecordソスフ場合ソスヘ難ソスeソスソスoソスCソスiソスソスソスニゑソスソストみゑソスソスPソスソスソスソスrソスノなゑソスワゑソスソスフで、
ソスソスソスソスIソスノは単ソスネゑソス|ソスCソスソスソス^ソスナゑソスソスソスstringソスソスソスrソスソスソスソスソス鼾ソスA
ソスソスソスgソスフ包ソスソスソスソスが難ソスソスソスソスナゑソスソスうソスニポソスCソスソスソス^ソスフ指ソスソスソス齒奇ソスソスソス痰ヲソスソスFalseソスソスソスヤゑソスワゑソスソスB
ソスソスソスフ擾ソスソスソスソスソスナはオソス[ソスoソス[ソスソスソスCソスhソスソスソス黷スソスソスソスZソスqソスソスgソスpソスソスソスワゑソスソスソスフで、
ソスIソス[ソスoソス[ソスソスソスCソスhソスソスソストゑソスソスソスハは変ゑソスソスワゑソスソスソスB
ソスソスソスソスソスソスソスソスソスソスソスソスソス@ソスヘゑソスソスソスソスツゑソスソスソスソスソスワゑソスソスB
stringソスフ包ソスソスソスソスソステ的ソスソスCharソスzソスソスノ変更ソスソスソス驍アソスニでゑソスソスソスメゑソスソスソスソスlソスソスソスヤゑソスワゑソスソスソスソスA
TCityソスソスLソス[ソスニゑソスソスソスTDictionaryソスソスソスソスソスソスツ搾ソスソスA
Createソスソスソスフ茨ソスソスソスソスソスComparerソスソスnソスソスソストゑソス驍アソスニでゑソスソスソスソスツ能ソスナゑソスソスB
ソスソスソスソスソスソスソスAソスnソスbソスVソスソスソスlソスナ搾ソスソスソスソスノ鯉ソスソスソスソスツ能ソスソスContainsKeyソスノ対ゑソスソスA
ContainsValueソスソスforソスナ擾ソスソスヤに抵ソスソスラてゑソスソス驍セソスソスソスネので低速ソスナゑソスソスB
ソスpソスノゑソスContainsValueソスソストぶ可能ソスソスソスソスソスソスソスソス鼾ソスヘ鯉ソスメゑソスソスソスソスソス゚ゑソスソスワゑソスソスB
ソスノゑソスソスフゑソスソスソスAソス答ゑソスソス閧ェソスニゑソスソスソスソスソスソスソスソスワゑソスソスB
type
TCity = record
public
Country : string;
Latitude : Integer;
Longitude : Integer;
class operator Equal ( A, B : TCity ) : Boolean;
class operator NotEqual( A, B : TCity ) : Boolean;
end;
class operator TCity.Equal(A, B: TCity): Boolean;
begin
Result := false;
if (A.Country = B.Country ) and
(A.Latitude = B.Latitude ) and
(A.Longitude= B.Longitude) then
Result := True;
end;
class operator TCity.NotEqual(A, B: TCity): Boolean;
begin
Result := True;
if (A.Country = B.Country ) and
(A.Latitude = B.Latitude ) and
(A.Longitude= B.Longitude) then
Result := false;
end;
ソスニゑソスソスソスニ、
if City=City2 thenソス@ソスEソスEソスE
ソスフようソスノでゑソスソスソスソスナゑソスソスヒ。ソスiDelphiソスナ会ソスソスZソスqソスフオソス[ソスoソス[ソスソスソス[ソスhソスヘ擾ソスソス゚て使ソスソスソスワゑソスソスソスソスj
ソスソスソスソスソスソスソスネゑソスソスソスAソスEソスFソスソスソスhソスソスソスソス ソスソスソスソスフ仰ゑソスlソスノ難ソスソスソスヘ変ゑソスソスワゑソスソスソスナゑソスソスソスソスB
ソスEソスFソスソスソスhソスソスソスソス ソスソスソスソスAソスソスソスノ抵ソスソスJソスネ会ソスソスソスソス閧ェソスニゑソスソスソスソスソスソスソスソスワゑソスソスB
>stringソスフ包ソスソスソスソスソステ的ソスソスCharソスzソスソスノ変更ソスソスソス驍アソスソス
ソスナでゑソスソス驍アソスニはわかソスソスワゑソスソスソスソスBソスソスソスソスソスソスソスソスヘバソスCソスiソスソスソスソスrソスネゑソスナゑソスソスヒ。
>Createソスソスソスフ茨ソスソスソスソスソスComparerソスソスnソスソスソストゑソス驍アソスソス
ソスヘ、ソスソスソスxソスソスソスソスソスト趣ソスソスノは厄ソスソスソスソスナゑソスソスソスソスEソスEソスOソスOソスソスソストゑソスTソスソスソスvソスソスソスソスソスソスソスツゑソスソスソスネゑソスソスソスソスソスソスフで・ソスE
ソスソスソスZソスqソスフオソス[ソスoソス[ソスソスソス[ソスhソスナは厄ソスソスソスソスナゑソスソスソスソスソスソスB
ソスソスソスソスノ暦ソスソストゑソスソスマみまゑソスソスソスB
ソスpソスソスナゑソスソスソスソスAソスTソスソスソスvソスソスソスソスソスソスソスソスワゑソスソスソスソスB
http://docwiki.embarcadero.com/CodeExamples/en/Generics_Defaults_TEqualityComparer_(Delphi)
ソスソスソスソスソスナゑソスソスソストゑソスソスソスフゑソスStringソス^ソスナ、ソスソスソスソスソスTCityソスニゑソスソスト搾ソスソスソストゑソスソスホよいソスソスソスニ思ソスソスソスワゑソスソスB
TCityソスソスソスソスRソス[ソスhソスソスソスソスネゑソスソストクソスソスソスXソスナ宣言ソスソスソスソス Equalsソスソスソス¥ソスbソスhソスソスIソス[ソスoソス[ソスソスソスCソスhソスソスソスソスソスソスト包ソスソス@ソスナゑソスソスソスソスソスワゑソスソスB
TCityソスソスソスソスソスRソス[ソスhソス^ソスナなゑソスソスニ駄目な場合ソスヘ使ソスソスソスワゑソスソスソス
ソスノゑソスソスフゑソスソスソスAソスTソスソスソスvソスソスソスソスソス閧ェソスニゑソスソスソスソスソスソスソスソスワゑソスソスB
ソスソスソスフようソスノ記ソスqソスソスソスソスソスナゑソスソスヒ。ソスソスソスmソスナゑソスソスB
ソスソスソスソスヘ確ソスFソスナゑソスソスワゑソスソスソスソスB
GetHashCodeソスソスソスソスネらずソスIソス[ソスoソス[ソスソスソスCソスhソスソスソスネゑソスソスニゑソスソス゚なゑソスナゑソスソスヒ。ソスiソス除ソスソスソスソスニエソスソスソス[ソスノなゑソスj
GetHashCodeソスヘゑソスソスネりいソスソスソスソスソスソスソスノ搾ソスソスソストゑソスソスソスメ通り動ソスすソスソスフゑソスソスネゑソスニゑソスEソスEソスB
ソスnソスbソスVソスソスソスlソスソスソスSソスソスソスソスソスソスソスノなゑソスソストゑソスネんだゑソスソスソスソスソスソスソスナゑソスソスヒ・ソスEソスEソスHソスソスソスフゑソスソスソスソスソスTソスbソスpソスソスソスかソスソスソストゑソスソスソスワゑソスソスソスB
au ソスソスソスソスAソス答ゑソスソス閧ェソスニゑソスソスソスソスソスソスソスソスワゑソスソスB
ソスpソスソスソスソスソスソスソスネゑソスソスソスNソスソスソスXソスナの会ソスソスZソスqソスIソス[ソスoソス[ソスソスソス[ソスhソスiソスIソス[ソスoソス[ソスソスソスCソスhソスHソスjソスフ包ソスソス@ソスソスソスかソスソスワゑソスソスソスBHelpソスソスソスニ出ソスソスソスソスlソスノ擾ソスソスソスソストゑソスソスソスソスナゑソスソスソスソスB
type
Myclass = record // class ソスノゑソスソスソスニコソスソスソスpソスCソスソスソスsソス¥ソスBrecordソスネゑソスOK
private
F: Integer;
public
class operator Add(a, b: Myclass): Myclass;
constructor create(I: Integer);
end;
constructor Myclass.create(I: Integer);
begin
F := I;
end;
class operator Myclass.Add(a, b: Myclass): Myclass;
begin
Result.F := a.F + b.F;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
Ctest1, Ctest2, Ctest3: Myclass;
begin
Ctest1 := Myclass.create(1);
Ctest2 := Myclass.create(2);
Ctest3 := Myclass.create(0);
Ctest3 := Ctest1 + Ctest2;
ShowMessage(IntToStr(Ctest3.F));
end;
ソスソスソスZソスqソスフオソス[ソスoソス[ソスソスソス[ソスhソスソスrecordソス^ソスナゑソスソスソスソスoソスソスソスネゑソスソスロゑソスソスナゑソスソスヒ。
Dictionaryソスノ難ソスソスソスト鯉ソスソスソスソスソスソスソスレ的ソスソスソスソスEqualsソスソスソス¥ソスbソスhソストのゑソスTObjectソスナ宣言ソスソスソスソストゑソスフでゑソスソスソスソスツゑソスIソス[ソスoソス[ソスソスソスCソスhソスソスソストゑソスソスナゑソスソスB
ソス{ソスニゑソスソスフ会ソスソスZソスqソスソスIソス[ソスoソス[ソスソスソス[ソスhソスソスソスソスネらこソスソスソスソスソスフ包ソスソス@ソスヘ駄目でゑソスソスヒ。
TCity = class(TObject)
Country : string;
Latitude : Integer;
Longitude : Integer;
function Equals(V: TObject): boolean; override;
end;
function TCity.Equals(V: TObject): boolean;
var
V1: TCity;
begin
if V is TCity then
begin
V1 := V as TCity;
if AnsiSameText(V1.Country, Country)
And (V1.Latitude = Latitude) And (V1.Longitude = Longitude) then
Result := True
else
Result := False;
end else
Result := False;
end;
ソスソスGetHashCodeソスヘゑソスソスネりいソスソスソスソスソスソスソスノ搾ソスソスソストゑソスソスソスメ通り動ソスすソスソスフゑソスソスネゑソスニゑソスEソスEソスB
ソスソスソスnソスbソスVソスソスソスlソスソスソスSソスソスソスソスソスソスソスノなゑソスソストゑソスネんだゑソスソスソスソスソスソスソスナゑソスソスヒ・ソスEソスEソスHソスソスソスフゑソスソスソスソスソスTソスbソスpソスソスソスかソスソスソストゑソスソスソスワゑソスソスソスB
TDictionaryソスフ場合ソスAソスgソスpソスソスソスソスnソスbソスVソスソスソスlソスヘゑソスソスソスソスソスソスソス32bitソスナゑソスソスソスソスソスA
ソスヌれだソスソスソスソスソスソスソス¥ソスネハソスbソスVソスソスソスヨ撰ソスソスソスgソスソスソスソスソスニゑソスソスソスナ必ソスソスソスユ突ゑソスソスワゑソスソスB
ソスナゑソスソスフで、ソスユ突ゑソスソスソスソス鼾ソスヘ難ソスソスソスIソスノゑソスソス轤オソスト格ソス[ソスソスソスソス謔、ソスノでゑソスソストゑソスソスワゑソスソスB
ソスソスソスソスソスソスソスnソスbソスVソスソスソスlソスソスソスユ突ゑソスソスソスニ格ソス[ソスソスソスAソスヌみ出ソスソスソスソスソスノ托ソスソスソスソスフ厄ソスソスハな擾ソスソスソスソスソスソスソスソスソスソスソスソスA
ソスKソスソスソスノ擾ソスソスソスソストゑソスソスソスソスソスソスソスソスニ鯉ソスソスソスソスト疎ソスソスソスノゑソスソスソスニ、ソスソスソスxソスソスソスソスソスノ遅ソスソスソスネゑソスワゑソスソスB
ソスナ茨ソスソスフ場合ソスzソスソスソスforソスナ回して探ソスソスソスソスソスxソスソスソスナゑソスソスソスソスソスATDictionaryソスソスgソスソスソスモ厄ソスソスソスソスネゑソスソスネゑソスワゑソスソスヒ。
ソスKソスソスソスnソスbソスVソスソスソスヨ撰ソスソスヘ搾ソスソスソスソス¥ソスネゑソスフゑソスGenerics.Defaultsソスノ趣ソスソスソスソスソスソスソストゑソスソスワゑソスソスフで、
ソスifunction BobJenkinsHash(const Data; Len, InitData: Integer): Integerソスj
ソスソスソスソスソスgソスソスソスホ搾ソスソスpソスxソスフ衝突は費ソスソスソスソスソスソスニ思ソスソスソスワゑソスソスB
ソスgソスソスソスソスソスヘ、ソス痰ヲソスホ包ソスソスソスソスソスマ撰ソス S ソスフハソスbソスVソスソスソスソスソスソス鼾ソスA
Result := BobJenkinsHash(S[1], Length(S) * SizeOf(S[1]), 0);
ソスニゑソスソスソスソス謔、ソスノゑソスソスワゑソスソスB
ソスナ鯉ソスフ茨ソスソスソスソスヘ会ソスソスソスwソス閧オソストゑソスヌゑソスソスフでゑソスソスソスソスAソスハ擾ソスソス0ソスソスwソス閧キソスソスホ厄ソス閧ソスソスワゑソスソスソスB
auソスソスソスソスAソスEソスFソスソスソスhソスソスソスソスソスソスソスソスA ソスソスソスxソスソスソスソス閧ェソスニゑソスソスソスソスソスソスソスソスワゑソスソスB
recordソスソスclassソスノゑソスソス驍セソスソスソスソスContainsValueソスヘ思ソスソスソストゑソスソス體ョソスソスノなゑソスワゑソスソスソスソスB
ソスiEqualsソスソスソス¥ソスbソスhソスソスIソス[ソスoソス[ソスソスソスCソスhソスソスソストゑソスソスソスネゑソスソストゑソスj
Equalsソスソスソス¥ソスbソスhソスヘゑソスヘり=ソスソスソスZソスqソスニは関係ソスネゑソスソスソスナゑソスソスヒ。
BobJenkinsHashソス@ソスノ関ゑソスソスワゑソスソストは、
http://stackoverflow.com/questions/1611636/how-to-create-a-case-in-sensitive-tequalitycomparer-for-tdictionary
ソスナ鯉ソスソスツゑソスソスワゑソスソスソスソスBソスソスソスJソスネ会ソスソスソスソス閧ェソスニゑソスソスソスソスソスソスソスソスワゑソスソスB
Delphiソスフ包ソスソス@ソスノつゑソスソストは暦ソスソスソスソスソスくて具ソスJソスソスソスワゑソスソスB
ソスiclassソスフ会ソスソスZソスqソスIソス[ソスoソス[ソスソスソス[ソスhソスヘゑソスヘゑソスナゑソスソスネゑソスソスフゑソスソスネ?ソスj
EqualsソスソスIソス[ソスoソス[ソスソスソスCソスhソスソスソスネゑソスソスニ、ソスソスソスソスソスソスソスAソスhソスソスソスXソスフ費ソスrソスノなゑソスソストゑソスソスワゑソスソストゑソスニ思ソスソスソスワゑソスソスソスB
ソス痰ヲソスホ、TCityソスソスソスソスCreateソスソスソスト難ソスソスソスソスlソスソスZソスbソスgソスソスソスト片包ソスソスソスDictionaryソスノ登ソス^ソスソスソスソスソスソスAソスソスソスソスソスソスソスソスgソスソスソスト鯉ソスソスソスソスソスソスソスソス鼾ソスノ鯉ソスソスツゑソスソスソスネゑソスソスソスソスト趣ソスソスノなるかソスニ。
procedure TForm1.Button2Click(Sender: TObject);
var
Dictionary : TDictionary<String, TCity>;
City : TCity;
City2 : TCity;
exist : boolean;
begin
Dictionary := TDictionary<String, TCity>.Create;
Dictionary.Clear;
Button1.Caption := Dictionary.ToString;
City := TCity.Create;
City.Country := 'ソスCソスMソスソスソスX';
City.Latitude := 515;
City.Longitude := -17;
Dictionary.Add('ソスソスソスソスソスhソスソス', City);
City2 := TCity.Create;
City2.Country := 'ソスCソスMソスソスソスX';
City2.Latitude := 515;
City2.Longitude := -17;
exist := Dictionary.ContainsValue(City2);
ShowMessage(BoolToStr(exist, true));
FreeAndNil(City2);
FreeAndNil(City);
FreeAndNil(Dictionary);
end;