比较动态序列中的值

时间:2014-09-09 21:45:41

标签: delphi compare

我有一个逻辑问题,我需要让用户配置比较一些简单值的序列。

例如,在INI文件中,序列存储如下:

[Fruit]
Apples=0
Oranges=3
Banana=4
Melon=1
Berry=5
Lemon=2

在这种情况下,INI ident将保持数量值。 INI值表示要比较的顺序。所以,我需要像这样比较:

{first}
if CurrentApples > PrevApples
    continue...
    {second}
    if CurrentMelons > PrevMelons
        continue...
        {third}
        if CurrentLemons > PrevLemons
            continue...
            {forth}
            if CurrentOranges > PrevOranges
                continue...etc.

如果序列被更改为首先进行Berry比较,那么在运行期间我需要能够按顺序比较这些量。基本上比较的顺序很重要并将导致各种行动。我无法在函数中动态创建一些变量,只需为它们指定一个名称即可。

我试图用这个做点什么:

var
  TestArray : array[0..5] of Boolean;
begin
  TestArray[0] := CurrentApples > PrevApples;
  TestArray[1] := CurrentMelons > PrevMelons;
  TestArray[2] := CurrentLemons > PrevLemons;
  TestArray[3] := CurrentOranges > PrevOranges;
  TestArray[4] := CurrentBanana > PrevBanana;
  TestArray[5] := CurrentBerry > PrevBerry;

然后按特定顺序评估数组索引,但我无法弄清楚如何从INI值中做到这一点。

有更简单的方法吗?如果正确的方法只是编写数百个嵌套的if语句,那么我可以尝试这样做,但它似乎有点矫枉过正。

1 个答案:

答案 0 :(得分:0)

您可以使用IniFile.ReadSection将键名读取到字符串列表中。它们的保存顺序应与存储在INI文件中的顺序相同。 然后,您可以将其用作控制机制来确定要使用的订单。

此外,您可能希望使用TMemIniFile而不是TIniFile,因为TMemIniFile将整个ini文件存储到内存中。当您从INI文件中读取值时,这可能非常有用,因为常规TIniFile总是从硬盘驱动器读取它们,这可能会降低性能。