Обсуждение:Класс для RSL, реализующий ассоциативные массивы с предопределёнными типами ключей и значений.

0 (0)
  • Развернуть Обсуждение:Класс для RSL, реализующий ассоциативные массивы с предопределёнными типами ключей и значений. ( Обсуждение примера  12.01.2016 13:45 )
    5(1)
    Класс для RSL, реализующий ассоциативные массивы с предопределёнными типами ключей и значений.
    Класс
    Тип ключа
    Тип значения
    TAssArraySI
    String
    Integer
    TAssArraySS
    String
    String
    TAssArraySD
    String
    Money
    TAssArraySO
    String
    Object
    TAssArrayIS
    Integer
    String
    TAssArrayS
    String

    TassArrayI
    Integer

    TBoostBiMapSI
    String
    Integer
    TBoostBiMapSS
    String
    String
    Для класса TAssArraySD в большинстве случаев поддерживается автоматическая конвертация входных параметров значений в тип Money.
    Класс TAssArraySO экспериментальный, может приводить к утечкам памяти и прочим подаркам.
    Поскольку RSL case insensitive название DLM и объектов следует читать как T[ema]‑Assa‑R‑ray :)
    Новое семейство классов TBoostBiMap это ассоциативные массивы с обратной связью, ключи в этом наборе уникальны, значения — нет. Для этих классов есть дополнительные методы с суффиксом R, реализующие поиск не по ключу, а по значению.
    TAssArray ключ → значение
    TBoostBiMap ключ ↔ значение
    Методы и свойства
    DelAll
    Очищает массив. Удаляет все элементы.
    Возвращаемое значение: нет
    Insert(key, value)
    Вставляет пару ключ-значение. Если ключ существует, то значение не заменяется.
    Возвращаемое значение: нет
    InsertM(key, value, key, value, key, value,..)
    Вставляет пару ключ-значение. Если ключ существует, то значение не заменяется. Позволяет указать произвольное количество пар ключ-значение.
    Возвращаемое значение: нет
    Get(key)
    Возвращаемое значение: value, соответствующее переданному ключу key. Если ключа в массиве нет, то возвращается значение с типом V_UNDEF. TArray, если как аргумент был передан TArray, в этом случае каждому элементу key массива-аргумента будет соответствовать элемент value массива-результата, или элемент типа V_UNDEF, если ключ не найден.
    var obj=TAssArraySI("январь",1,"февраль",2);
    obj.Insert("сентябрь",9);
    obj.InsertM("октябрь",10,"ноябрь",11);
    PrintLn(obj.Get("октябрь")); //выведет 10
    GetR(value)
    Для классов семейства TBoostBiMap.
    Возвращаемое значение:
    Массив TArray ключей key, соответствующий переданному значению value. Если ключа в массиве нет, то возвращается пустой массив.
    Массив массивов (TArray с элементами TArray), если как аргумент был передан TArray, в этом случае каждому элементу value массива-аргумента будет соответствовать массив ключей key массива-результата.
    obj.Insert("ООО Ромашка","7701123458");
    obj.Insert("Ромашка, ООО","7701123458");
    obj.Insert("Общество с огр. отв. Ромашка","7701123458");
    var a=obj.GetR("7701123458");
    PrintLn(a[0]); // Общество с огр. отв. Ромашка
    PrintLn(a[1]); // ООО Ромашка
    PrintLn(a[2]); // Ромашка, ООО
    Exist(key)
    Проверяет, существует ли ключ в массиве.
    Возвращаемое значение: true — если ключ есть в массиве, false — если ключа нет.
    ExistR(key)
    Для TBoostBiMap проверяет, существует ли значение в массиве.
    Возвращаемое значение: true — если значение есть в массиве, false — если значения нет.
    Del(key)
    Удаляет из массива пару ключ-значение по переданному ключу.
    Возвращаемое значение: true — если ключ был в массиве, false — если ключа не было.
    At(key)
    Свойство, допускающее присваивание. Позволяет прочитать или записать значение по переданному ключу. В режиме чтения аналогично Get.
    Возвращаемое значение: value, соответствующее переданному ключу key. Если ключа в массиве нет, то возвращается значение с типом V_UNDEF.
    obj.At("декабрь")=12;
    PrintLn(obj.At("декабрь"));
    Inc(key)
    Увеличивает на единицу значение, соответствующее переданному ключу key. Если ключа в массиве не было, то он добавляется со значением 1. Рекомендуется для использования в счётчиках.
    Возвращаемое значение: нет
    Rewind
    Смещает внутренний указатель на позицию перед началом. Применяется для организации цикла по всем элементам массива.
    Возвращаемое значение: нет
    Next
    Смещает внутренний указатель на следующую позицию. Может применяется для организации цикла по всем элементам массива.
    Возвращаемое значение: true — если конец массива не достигнут, false — если достигнут конец массива.
    Prev
    Смещает внутренний указатель на предыдущую позицию. Может применяется для организации цикла по всем элементам массива.
    Возвращаемое значение: true — если конец массива не достигнут, false — если достигнут конец массива.
    CurrentKey
    Возвращает ключ, соответствующий позиции внутреннего указателя. Применяется для организации цикла по всем элементам массива.
    Возвращаемое значение: key или значение с типом V_UNDEF, если достигнут конец массива.
    CurrentValue
    Возвращает значение, соответствующее позиции внутреннего указателя. Применяется для организации цикла по всем элементам массива.
    Возвращаемое значение: value или значение с типом V_UNDEF, если достигнут конец массива.
    GetGE([key])
    Смещает внутренний указатель на позицию, ключ которой больше или равен key. Если аргумент опущен, то берётся key установленный предыдущим вызовом SetSeekKey.
    Возвращаемое значение: true — если внутренний указатель успешно установлен в границах массива, false — если достигнут конец массива.
    stat=obj.GetGE("Москва");
    while (stat)
    PrintLn(obj.CurrentKey,": ", obj.CurrentValue);
    stat=obj.next
    end;
    GetGT([key])
    Смещает внутренний указатель на позицию, ключ которой строго больше key. Если аргумент опущен, то берётся key установленный предыдущим вызовом SetSeekKey.
    Возвращаемое значение: true — если внутренний указатель успешно установлен в границах массива, false — если достигнут конец массива.
    GetLT([key])
    Смещает внутренний указатель на позицию, ключ которой строго меньше key. Если аргумент опущен, то берётся key установленный предыдущим вызовом SetSeekKey.
    Возвращаемое значение: true — если внутренний указатель успешно установлен в границах массива, false — если достигнут конец массива.
    GetLE([key])
    Смещает внутренний указатель на позицию, ключ которой меньше либо равен key. Если аргумент опущен, то берётся key установленный предыдущим вызовом SetSeekKey.
    Возвращаемое значение: true — если внутренний указатель успешно установлен в границах массива, false — если достигнут конец массива.
    GetEQ([key])
    Смещает внутренний указатель на позицию, ключ которой равен key. Если аргумент опущен, то берётся key установленный предыдущим вызовом SetSeekKey.
    Возвращаемое значение: true — если внутренний указатель успешно установлен в границах массива, false — если достигнут конец массива.
    SetSeekKey(key)
    Устанавливает ключ key, который будет использоваться GetGE, GetGT без аргумента.
    Возвращаемое значение: нет
    obj.SetSeekKey("Москва");
    stat=obj.GetGE();
    while (stat)
    PrintLn(obj.CurrentKey,": ", obj.CurrentValue);
    stat=obj.next
    end;
    KeyNum
    Переключает режим поиска по ключу или по значению для функций GetGE, GetGT, GetLE, GetLT, GetEQ и SetSeekKey. 0 — искать по ключу, 1 — искать по значению.
    Возвращаемое значение: нет.
    /* пример. печать городов с количеством филиалов меньше 10 */
    import "boostbmp.d32";
    var obj=TBoostBiMapSI();
    obj.InsertM("Москва", 20, "Ленинград", 10, "Екатеринбург", 5, "Нижний Новгород", 3, "Казань", 1);
    obj.KeyNum=1; //следующие функции поиска будут работать по значению
    obj.SetSeekKey(10);
    var r=obj.GetLT();
    while (r);
    PrintLn(obj.CurrentKey," ",obj.CurrentValue);
    r=obj.prev();
    end;
    Выведет:
    Екатеринбург 5
    Нижний Новгород 3
    Казань 1
    Delete
    Удаляет из массива пару ключ-значение по ключу, ранее установленному SetSeekKey.
    Возвращаемое значение: true — если ключ был в массиве, false — если ключа не было.
    Implode([delim])
    Собирает строку из значений.
    delim — разделитель, строка, не обязательный аргумент, по умолчанию «, »
    Возвращаемое значение: строка содержащая все значения в строковом представлении, разделённые разделителем.
    ImplodeKV([delimV][, delimKV])
    Собирает строку из ключей и значений.
    delimV — разделитель пар ключ-значение, строка, не обязательный аргумент, по умолчанию «, »
    delimKV — разделитель внутри пары ключ-значение, строка, не обязательный аргумент, по умолчанию «->»
    Возвращаемое значение: строка содержащая все пары ключ-значение, разделённые разделителями.
    Explode(str, [delimV][, delimKV])
    Разбирает строку на пары ключ-значение и добавляет их в массив.
    delimV — разделитель пар ключ-значение, строка, не обязательный аргумент, по умолчанию «;»
    delimKV — разделитель внутри пары ключ-значение, строка, не обязательный аргумент, по умолчанию «,»
    Возвращаемое значение: нет.
    Set(key, value)
    Устанавливает элемент массива с ключом key в значение value. Если ключа не было, он добавляется, если был, то его значение заменяется новым.
    Возвращаемое значение: нет
    Sum
    Возвращаемое значение: сумма всех значений массива, для пустого — 0.
    Size
    Возвращаемое значение: количество элементов в массиве.
    Empty
    Проверка массива на пустоту. По классике этот метод предпочтительнее сравнения .Size==0.
    Возвращаемое значение: true — если массив пустой, false — если есть элементы.
    GetKeyArray
    Возвращаемое значение: объект класса TArray, содержащий все ключи массива.
    GetValueArray
    Возвращаемое значение: объект класса TArray, содержащий все значения массива.
    GetArray([array_key][, array_value])
    array_key — если параметр задан и имеет класс TArray, то в нём буде возвращён массив, содержащий все ключи ассоциативного массива.
    array_value — если параметр задан и имеет класс TArray, то в нём буде возвращён массив, содержащий все значения ассоциативного массива.
    В теории работает быстрее, чем последовательный вызов GetKeyArray и GetValueArray, поскольку перебирает ассоциативный массив один раз.
    Возвращаемое значение: нет.
    Add(key, value)
    Арифметически прибавляет value к значению, соответствующему ключу key. Если в масиве не было ключа key, то он добавляется и значение устанавливается в value.
    key — ключ изменяемого значения.
    value — прибавляемая величина или значение нового элемента.
    Возвращаемое значение: нет.
    Min([key])
    Возвращает минимальное значение в массиве. Прямой перебор, на больших массивах может работать медленно.
    key — если параметр задан, то в нём будет возвращён ключ, соответствующий возвращённому значению.
    Возвращаемое значение: минимальное значение в массиве
    Max([key])
    Возвращает максимальное значение в массиве. Прямой перебор, на больших массивах может работать медленно.
    key — если параметр задан, то в нём будет возвращён ключ, соответствующий возвращённому значению.
    Возвращаемое значение: максимальное значение в массиве
    First([key])
    Возвращает первое значение в массиве.
    key — если параметр задан, то в нём будет возвращён ключ, соответствующий возвращённому значению. Это будет минимальный ключ.
    Возвращаемое значение: первое значение в массиве
    Last([key])
    Возвращает последнее значение в массиве.
    key — если параметр задан, то в нём будет возвращён ключ, соответствующий возвращённому значению. Это будет максимальный ключ.
    Возвращаемое значение: последнее значение в массиве
    FldNumber
    Эмулирует количество полей.
    Возвращаемое значение: для TassArrayS — 1, для остальных — 2
    NRecords
    Аналог Size.
    GetByNum(idx[, key])
    Возвращает значение по порядковому номеру. Функция обладает низким быстродействием и служит исключительно для целей отладки.
    idx — порядковый номер.
    key — если параметр задан, то в нём будет возвращён ключ, соответствующий возвращённому значению.
    Возвращаемое значение: последнее значение в массиве
    ForEachMacro(macro_name)
    Перебирает все элементы массива, и для каждого вызывает процедуру с именем macro_name. Процедуре передаётся два аргумента: ключ и значение. Перебор происходит в порядке возрастания ключа.
    Возвращаемое значение: нет
    var obj=TAssArraySI(
    "010", 1,
    "030", 3,
    "050", 5);

    macro Proc1(p1, p2)
    PrintLn("Hello! I'm Proc1. My args: ", p1, ", ", p2);
    end;

    obj.ForEachMacro("Proc1");
    ForEachDescMacro(macro_name)
    Для TBoostBiMap. Перебирает все элементы массива, и для каждого вызывает процедуру с именем macro_name. Процедуре передаётся два аргумента: ключ и значение. Перебор происходит в порядке убывания ключа.
    Возвращаемое значение: нет
    ForEachMacroR(macro_name)
    Для TBoostBiMap. Перебирает все элементы массива, и для каждого вызывает процедуру с именем macro_name. Процедуре передаётся два аргумента: ключ и значение. Перебор происходит в порядке возрастания значения.
    Возвращаемое значение: нет
    ForEachDescMacroR(macro_name)
    Для TBoostBiMap. Перебирает все элементы массива, и для каждого вызывает процедуру с именем macro_name. Процедуре передаётся два аргумента: ключ и значение. Перебор происходит в порядке убывания значения.
    Возвращаемое значение: нет
    Write(file_name)
    Записывает массив в файл. Впоследствии массив может быть прочитан методом Read.
    file_name — строка, имя файла в который будет записан массив.
    Возвращаемое значение: нет
    Read(file_name)
    Читает из файла массив, ранее записанный методом Write. Если файл не найден, будет сгенерированна ошибка.
    file_name — строка, имя файла из которого будет прочитан массив.
    Возвращаемое значение: нет
    Copy()
    Копирует объект в новый.
    Возвращаемое значение: объект того же класса, содержащий копию
    Конструктор
    По поведению аналогичен InsertM.
    Посмотреть пример
    >> Ответить