Pascal中的记录集

5

我想知道是否有办法在Pascal中创建一组记录。 我在网上搜寻了很多,认为这是不可能的。

type    
  TRecord = record
    StrField: string;
    IntField: Integer;
  end;

  TSetOfRecord = set of TRecord;         

1
Pascal中集合的基本类型是序数。 - Sertac Akyuz
请问一下,所有可能字符串的集合有多大? - Marco van de Voort
2个回答

6

是的,这是不可能的,集合成员必须是有序类型。据我所知,您也只能拥有有限的成员数量,255似乎很熟悉。

尽管记录中似乎有更多的组合,但不清楚什么定义了成员的唯一性。


1
256是一种实现限制,尽管它很常见。 - Marco van de Voort
1
在传统的Delphi代码中仍然经常使用set,它通常是对枚举标志进行操作的更简洁描述。当C#的开发者们没有这样做时,我有点失望。 - Tony Hopkinson

1
“Set of records”没有意义。我猜你的意思是“记录集合”。如果是这样,你可以用多种方法实现。
我建议使用“开放数组”(不同于“动态数组”)。
你需要编写一些自己的例程,其中之一是:
function RecordInCollection(const ARecord: TYourRecord; const ACollection: array of TYourRecord): Boolean;
var
  Index1: Integer;
begin
  Result := False;
  for Index1 := Low(ACollection) to High(ACollection) do begin
    Result := (ACollection[Index1].StrField = ARecord.StrField) and (ACollection[Index1].IntField = ARecord.IntField);
    if Result then Exit;
  end;
end;

你可以这样调用它:

RecordInCollection(Record1,[Record2,Record3,Record4])

或者你可以使用预先声明的常量数组而不是[Record2,Record3,Record4]。


1
一组记录确实是有意义的。就像是一个无序、无键的唯一成员集合。 - Tony Hopkinson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接