首页 > 代码库 > 使用 Delphi Xe 的 TDictionary
使用 Delphi Xe 的 TDictionary
原本一直使用 TList, 将定义的一个个 Record 保存在TList 里面, 为了能把某些对象管理起来, 例如一个类的 n 多实例,可以进行索引、查找、释放等
今天刚看到原来已经有了一个叫 TDictionary 对象,用起来挺方便。 挺像我们在DB中定义的 Dictionary 表,Key、Value。 而那个不管Key、Value 都挺发达,允许各种定义的类。
ok,下面官方Demo很通俗易懂,各方法都在:
type TCity = class Country: String; Latitude: Double; Longitude: Double; end; const EPSILON = 0.0000001; var Dictionary: TDictionary<String, TCity>; City, Value: TCity; Key: String; begin { Create the dictionary. } Dictionary := TDictionary<String, TCity>.Create; City := TCity.Create; { Add some key-value pairs to the dictionary. } City.Country := ‘Romania‘; City.Latitude := 47.16; City.Longitude := 27.58; Dictionary.Add(‘Iasi‘, City); City := TCity.Create; City.Country := ‘United Kingdom‘; City.Latitude := 51.5; City.Longitude := -0.17; Dictionary.Add(‘London‘, City); City := TCity.Create; City.Country := ‘Argentina‘; { Notice the wrong coordinates } City.Latitude := 0; City.Longitude := 0; Dictionary.Add(‘Buenos Aires‘, City); { Display the current number of key-value entries. } writeln(‘Number of pairs in the dictionary: ‘ + IntToStr(Dictionary.Count)); // Try looking up "Iasi". if (Dictionary.TryGetValue(‘Iasi‘, City) = True) then begin writeln( ‘Iasi is located in ‘ + City.Country + ‘ with latitude = ‘ + FloatToStrF(City.Latitude, ffFixed, 4, 2) + ‘ and longitude = ‘ + FloatToStrF(City.Longitude, ffFixed, 4, 2) ); end else writeln(‘Could not find Iasi in the dictionary‘); { Remove the "Iasi" key from dictionary. } Dictionary.Remove(‘Iasi‘); { Make sure the dictionary‘s capacity is set to the number of entries. } Dictionary.TrimExcess; { Test if "Iasi" is a key in the dictionary. } if Dictionary.ContainsKey(‘Iasi‘) then writeln(‘The key "Iasi" is in the dictionary.‘) else writeln(‘The key "Iasi" is not in the dictionary.‘); { Test how (United Kingdom, 51.5, -0.17) is a value in the dictionary but ContainsValue returns False if passed a different instance of TCity with the same data, as different instances have different references. } if Dictionary.ContainsKey(‘London‘) then begin Dictionary.TryGetValue(‘London‘, City); if (City.Country =