2014-09-09 2 views
0

У меня есть логическая проблема, когда мне нужно разрешить пользователю настраивать последовательность, с помощью которой можно сравнивать некоторые простые значения.Сравнение значений в динамической последовательности

Например, в файле INI, последовательность сохраняется как:

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

В этом случае, идент INI собирается быть проведение значение количества. Значение INI представляет собой порядок сравнения. Таким образом, мне нужно, чтобы сравнить, как это:

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

Если последовательность была изменена, чтобы поставить сравнение Берри первым, во время выполнения Мне нужно, чтобы иметь возможность сравнить эти величины в таком порядке. В основном порядок, с которым имеют значение сравнения, приведет к различным действиям. Я не могу динамически создавать некоторые переменные в функции и просто назначать им имя.

Я пытался что-то сделать с этим:

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

Пока вы не начнете использовать массивы и/или словари вместо отдельных переменных, вы будете обречены писать все комбинации вручную. Итак, шаг 1 - узнать о массивах/словарях и контейнерах. –

ответ

0

Вы можете использовать IniFile.ReadSection для чтения имен ключей в строковый список. Они должны быть сохранены в том же порядке, что и в INI-файле. Затем вы используете это как механизм управления, чтобы определить, какой заказ использовать.

Также вы можете использовать TMemIniFile вместо TIniFile, поскольку TMemIniFile хранит весь файл ini в памяти. Это может пригодиться, когда вы читаете значения из INI-файла, потому что обычный TIniFile всегда читает их с жесткого диска, что может снизить производительность.

Смежные вопросы