我有一个包含2行的StringList
aOldPriceTerms[0] = 'FuelAddition=336643160'
aOldPriceTerms[1] = 'Freight=336643155'
所以它可以正常使用
aOldPriceTerms.Values ['运费'] - > ' 336643155'
我想从列表中找到ID列表。
如此简单
'FuelAddition','Freight'
目前我使用此代码,其中aOldPriceTerms是实际的StringList。
function GetList(aOldPriceTerms: TStringList): String;
var
vOldTerm : string;
vOldTermsList : TStringList;
begin
vOldTermsList := TStringList.Create;
try
for i := aOldPriceTerms.Count - 1 downto 0 do
begin
vOldTerm := Copy(aOldPriceTerms[i], 1, (Pos('=', aOldPriceTerms[i])-1));
vOldTermsList.Add(vOldTerm);
end;
Result := vOldTermsList.CommaText;
finally
FreeAndNil(vOldTermsList);
end;
end;
我的问题是有更清洁的方法来获取ID吗?
答案 0 :(得分:7)
示例来自Delphi Basics,但Delphi documentation
中也描述了TStringList.Names
// Now display all name and age pair values
for i := 0 to names.Count-1 do
begin
ShowMessage(names.Names[i]+' is '+names.ValueFromIndex[i]);
end;
答案 1 :(得分:1)
您可以使用来自alcinoe(https://github.com/Zeus64/alcinoe)的TALNVStringList
(NV为nameValue)来处理名称和值,而无需一直分割字符串
TALNVStringList
与TStringList
完全相同(除了TstringList
替换TALNVStringList
之外,代码中没有任何更改),除了它在速度方面效率更高因为它将名称存储在一个专用字段中,而值存储在另一个专用字段中(无需一直执行pos('=')
和copy()
来检索名称和行的值)
for i := 0 to aOldPriceTerms.Count-1 do
begin
ShowMessage(aOldPriceTerms.Names[i]+' is '+aOldPriceTerms.ValueFromIndex[i]);
end;
Exe演示显示经典TstringList的速度惩罚:https://svn.code.sf.net/p/alcinoe/code/demos/ALSortedListBenchmark/win32/ALSortedListBenchmark.exe
答案 2 :(得分:-2)
获取所有ID
for name in names.Names do
begin
i := names.IndexOf[name];
end;
或
获取所有值
for name in vOldTermsList.Names do
begin
Value := vOldTermsList.Value[name];
end;