Delphi 理解整数列表上的t字典
我可以直接在TList类上创建TDictionary吗?如果我创建的TDictionary类的键和值总是与BlackList.Add(1,1)一样的数据,这看起来有点麻烦Delphi 理解整数列表上的t字典,delphi,Delphi,我可以直接在TList类上创建TDictionary吗?如果我创建的TDictionary类的键和值总是与BlackList.Add(1,1)一样的数据,这看起来有点麻烦 var 黑名单:t字典; 结果列表:t词典; TestListA:TLIst; TestListB:TLIst; i:整数; 开始 黑名单。添加(1,1); 黑名单。添加(2,2); 对于i:=0到TestListA.Count-1 do 开始 如果BlackList.ContainsValue(TestListA[i]),那
var
黑名单:t字典;
结果列表:t词典;
TestListA:TLIst;
TestListB:TLIst;
i:整数;
开始
黑名单。添加(1,1);
黑名单。添加(2,2);
对于i:=0到TestListA.Count-1 do
开始
如果BlackList.ContainsValue(TestListA[i]),那么
开始
//没有行动。。。
结束
其他的
开始
Add(i,TestListA[i]);
结束;
结束;
对于i:=0到TestListB.Count-1 do
开始
如果BlackList.ContainsValue(TestListB[i]),那么
开始
//没有行动。。。
结束
其他的
开始
如果不是(ResultList.ContainsValue(TestListB[i]),那么
Add(i,TestListB[i]);
结束;
结束;
结束;
该算法的目的是比较2个整数列表,查找所有的双精度数,但从黑名单中排除数字。第一个q在这里。在这个特定的代码中,使用
t字典
的全部目的是利用O(1)查找。使用TList
,这是一个数组,您没有该属性。查找通常是O(n),如果排序,则是O(logn)。因此,您无法通过任何方式从TList
中提取O(1)查找性能,因此使用TDictionary
因此,正是性能动机推动了TDictionary
的使用。正如我在上一个问题中所说的,设置词典的开销只有在列表很大的情况下才是值得的。您需要进行一些基准测试,以量化在这种情况下“大”意味着什么
至于字典,使用什么值并不重要,因为只有键才有意义。所以始终使用零。理想情况下,您需要的是基于与字典相同的算法的哈希集类型。但我不相信股票里有这样的东西。我希望像Spring4D这样的库能够提供这种功能 在这个特定代码中,使用
t字典
的全部目的是利用O(1)查找。使用TList
,这是一个数组,您没有该属性。查找通常是O(n),如果排序,则是O(logn)。因此,您无法通过任何方式从TList
中提取O(1)查找性能,因此使用TDictionary
因此,正是性能动机推动了TDictionary
的使用。正如我在上一个问题中所说的,设置词典的开销只有在列表很大的情况下才是值得的。您需要进行一些基准测试,以量化在这种情况下“大”意味着什么
至于字典,使用什么值并不重要,因为只有键才有意义。所以始终使用零。理想情况下,您需要的是基于与字典相同的算法的哈希集类型。但我不相信股票里有这样的东西。我希望像Spring4D这样的库能够提供这种功能 在这个特定代码中,使用
t字典
的全部目的是利用O(1)查找。使用TList
,这是一个数组,您没有该属性。查找通常是O(n),如果排序,则是O(logn)。因此,您无法通过任何方式从TList
中提取O(1)查找性能,因此使用TDictionary
因此,正是性能动机推动了TDictionary
的使用。正如我在上一个问题中所说的,设置词典的开销只有在列表很大的情况下才是值得的。您需要进行一些基准测试,以量化在这种情况下“大”意味着什么
至于字典,使用什么值并不重要,因为只有键才有意义。所以始终使用零。理想情况下,您需要的是基于与字典相同的算法的哈希集类型。但我不相信股票里有这样的东西。我希望像Spring4D这样的库能够提供这种功能 在这个特定代码中,使用
t字典
的全部目的是利用O(1)查找。使用TList
,这是一个数组,您没有该属性。查找通常是O(n),如果排序,则是O(logn)。因此,您无法通过任何方式从TList
中提取O(1)查找性能,因此使用TDictionary
因此,正是性能动机推动了TDictionary
的使用。正如我在上一个问题中所说的,设置词典的开销只有在列表很大的情况下才是值得的。您需要进行一些基准测试,以量化在这种情况下“大”意味着什么
至于字典,使用什么值并不重要,因为只有键才有意义。所以始终使用零。理想情况下,您需要的是基于与字典相同的算法的哈希集类型。但我不相信股票里有这样的东西。我希望像Spring4D这样的库能够提供这种功能 这里不需要词典
TList.Contains
的作用与TDictionary.ContainsValue
@SirRufo是的,但我认为OP想用TDictionary.ContainsKey
来代替,否则在这种情况下使用字典会失去意义。这里不需要字典TList.Contains
的作用与TDictionary.ContainsValue
@SirRufo是的,但我认为OP想用TDictionary.ContainsKey
来代替,否则在这种情况下使用字典会失去意义。这里不需要字典TList.Contains
的作用与TDictionary.ContainsValue
@SirRufo是的,但我认为OP想用TDictionary.ContainsKey
来代替,否则使用字典就会失去它的作用
var
BlackList: TDictionary<Integer, Integer>;
ResultList: TDictionary<Integer, Integer>;
TestListA: TLIst<Integer>;
TestListB: TLIst<Integer>;
i: Integer;
begin
BlackList.Add(1, 1);
BlackList.Add(2, 2);
for i := 0 to TestListA.Count - 1 do
begin
if BlackList.ContainsValue(TestListA[i]) then
begin
// no action ...
end
else
begin
ResultList.Add(i, TestListA[i]);
end;
end;
for i := 0 to TestListB.Count - 1 do
begin
if BlackList.ContainsValue(TestListB[i]) then
begin
// no action ...
end
else
begin
if not(ResultList.ContainsValue(TestListB[i])) then
ResultList.Add(i, TestListB[i]);
end;
end;
end;