Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi 理解整数列表上的t字典_Delphi - Fatal编程技术网

Delphi 理解整数列表上的t字典

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]),那

我可以直接在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]),那么
开始
//没有行动。。。
结束
其他的
开始
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;