4 delphi freepascal lazarus delphi-xe
我有以下内容:
TDirection = (dirNorth, dirEast, dirSouth, dirWest);
TDirections = set of TDirection;
在一个单独的类中,我将它声明为属性:
property Directions: TDirections read FDirections write FDirections;
我想要的是能够像对待布尔人一样对待它们,所以例如如果dirNorth是真的那么它将是1,如果是假的话0.
我想把它想象成 (1,0,0,0)
我想检查方向是否为True,我可以使用:
var
  IsTrue: Boolean;
begin
  IsTrue := (DirNorth in Directions);
不确定上述是否正确,但我的另一个问题是如何更改其中一个方向True或False?
我现在达到了我的一个混乱状态:(
这是我尝试设置值的最后一件事,但我得到的是Illegal Expression(在Lazarus中).
Directions(TDirection(DirNorth)) := True;
And*_*and 13
Directions是一组类型的元素TDirection.
要查看它是否包含 dirNorth,请执行dirNorth in Directions.使用in运算符的结果是布尔值; dirNorth in Directions如果集合Directions包含元素,则为true dirNorth.
为确保dirNorth包含在内Directions,请执行Directions := Directions + [dirNorth].
要确保dirNorth是没有在包括Directions,做Directions := Directions - [dirNorth].
要设置Directions为特定值,只需指定:Directions := [dirNorth, dirSouth].
形式上,+计算两组的并集; -计算两组的集合差异.*计算两个操作数的交集.
你也有好的Include和Exclude功能:Include(Directions, dirNorth)不一样的东西Directions := Directions + [dirNorth]; Exclude(Directions, dirNorth)做同样的事情Directions := Directions - [dirNorth].
例如,如果
type
  TAnimal = (aDog, aCat, aRat, aRabbit);
  TAnimalSet = set of TAnimal;
const
  MyAnimals = [aDog, aRat, aRabbit];
  YourAnimals = [aDog, aCat];
然后
aDog in MyAnimals = true;
aCat in MyAnimals = false;
aRat in YourAnimals = false;
aCat in YourAnimals = true;
MyAnimals + YourAnimals = [aDog, aRat, aRabbit, aCat];
MyAnimals - YourAnimals = [aRat, aRabbit];
MyAnimals * YourAnimals = [aDog];
在我的回答中隐含的事实是Delphi set类型是在数学集之后建模的.有关Delphi set类型的更多信息,请参阅官方文档.
| 归档时间: | 
 | 
| 查看次数: | 5852 次 | 
| 最近记录: |