Delphi :[数组]操作中的[int]不起作用

mbyulnm0  于 2022-12-23  发布在  其他
关注(0)|答案(1)|浏览(134)

我有一个布尔值,如果一个数字出现在某个数组中,就需要设置它。我想通过以下操作来检查它:

procedure test();
var
    arr: Array[0..255] of smallint;
    i: smallint;
begin
    arr[0] := 1;
    i := 1;
    if i in arr then
        writeln('IN')
    else
        writeln('OUT')
end;

运行此命令将得到错误:*E2015运算符不适用于此操作数类型 *。但是我在很多堆栈溢出的答案中看到了这种方法。这个特定的实现不起作用吗?我缺少一个编译器指令吗?我使用的是 Delphi 10.3(Rio)。

jxct1oxe

jxct1oxe1#

这是意料之中的。
in运算符用于集合,而不是数组。
如果你需要检查一个数组是否包含一个特定的值,你需要用标准的方法迭代数组:

function MyArrayContains(const AArray: array of SmallInt;
  const AValue: SmallInt): Boolean;
begin
  for var i := Low(AArray) to High(AArray) do
    if AArray[i] = AValue then
      Exit(True);
  Result := False;
end;

但是,使用高级记录类型和operator overloading,您可以通过in运算符支持定义自己的基于数组的记录类型。

相关问题