Pan*_*al. 10 delphi algorithm delphi-2009
嗨,我正在使用Delphi,我有一个带有以下项目的StringList:
45
A15
015
A15
A15
45
Run Code Online (Sandbox Code Playgroud)
我想处理它并制作第二个字符串列表,其中包含每个元素的外观数量:
45 [2]
015 [1]
A15 [3]
Run Code Online (Sandbox Code Playgroud)
我怎么能用Delphi做到这一点?
jpf*_*ius 10
你可以使用字典:
Frequencies := TDictionary <String, Integer>.Create;
try
// Count frequencies
for Str in StringList do
begin
if Frequencies.ContainsKey (Str) then
Frequencies [Str] := Frequencies [Str] + 1
else
Frequencies.Add (Str, 1);
end;
// Output results to console
for Str in Frequencies.Keys do
WriteLn (Str + ': ' + IntToStr (Frequencies [Str]));
finally
FreeAndNil (Frequencies);
end;
Run Code Online (Sandbox Code Playgroud)
唯一的问题可能是结果出现的顺序完全是随机的,并且依赖于哈希映射的内部工作.
感谢daemon_x获取完整的单位代码:
program Project1;
{$APPTYPE CONSOLE}
uses SysUtils, Classes, Generics.Collections;
var Str: String;
StringList: TStrings;
Frequencies: TDictionary <String, Integer>;
begin
StringList := TStringList.Create;
StringList.Add('45');
StringList.Add('A15');
StringList.Add('015');
StringList.Add('A15');
StringList.Add('A15');
StringList.Add('45');
Frequencies := TDictionary <String, Integer>.Create;
try
// Count frequencies
for Str in StringList do
begin
if Frequencies.ContainsKey (Str) then
Frequencies [Str] := Frequencies [Str] + 1
else
Frequencies.Add (Str, 1);
end;
// Output results to console
for Str in Frequencies.Keys do
WriteLn (Str + ': ' + IntToStr (Frequencies [Str]));
finally
StringList.Free;
FreeAndNil(Frequencies);
end;
end.
Run Code Online (Sandbox Code Playgroud)