gpt4 book ai didi

delphi - 如何在 Delphi 中正确迭代 DMultiMap (DeCAL) 的搜索结果?

转载 作者:行者123 更新时间:2023-12-02 03:38:14 26 4
gpt4 key购买 nike

我正在使用 DeCAL 中的 DMultiMap 容器用Delphi 6来存储数据。键是一个字符串,可以在 map 中出现多次。

我想知道如何使用给定键正确迭代所有对象。

这段代码:

function IterateOverObjects(map: DMultimap);
var iter: DIterator;
begin
iter := map.locate(['abc']);
while IterateOver(iter) do
begin
// do something with the value...
end;
end;

返回以“abc”为键的所有对象?或者它会返回从第一个以“abc”为键的对象开始的 map 的所有对象?

编辑:刚刚测试。它返回从第一个以“abc”为键的对象开始的映射的所有对象。那么迭代“abc”的最佳方法是什么?

最佳答案

编辑:测试版本(我更改了以前使用的 findif,因为我调查它不使用快速定位,它只是循环遍历所有项目):

EDIT2:因为我之前的测试很糟糕,所以我编辑了函数以使其正常工作。它看起来几乎与名称的答案相同,但我对其进行了更改,以免任何功能不正确的人感到困惑。

    function IterateOverFound(Map: DMultiMap; var iter: DIterator; const obj: array of const): Boolean;
begin
if diIteration in iter.flags then
begin
advance(iter);
SetToKey(iter);
iter := findIn(iter, Map.finish, obj);
end
else
begin
iter := Map.locate(obj);
Include(iter.flags, diIteration);
end;

Result := not atEnd(iter);
if not result then
Exclude(iter.flags, diIteration);
end;

使用示例:

var
iter: DIterator;

iter := map.start;
while IterateOverFound(map, iter, ['abc']) do
begin
SetToValue(iter);
// get value
end;

关于delphi - 如何在 Delphi 中正确迭代 DMultiMap (DeCAL) 的搜索结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5040367/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com