作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 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/
我是一名优秀的程序员,十分优秀!