std/strtabs
Исходный кодРедактироватьМодуль strtabs реализует эффективную хеш-таблицу, представляющую собой отображение строк на строки. Поддерживает режимы чувствительности к регистру, нечувствительности к регистру и нечувствительности к стилю.
Пример:
import std/strtabs var t = newStringTable() t["name"] = "John" t["city"] = "Monaco" doAssert t.len == 2 doAssert t.hasKey "name" doAssert "name" in tТаблицы строк могут быть созданы с помощью конструктора таблицы:
Пример:
import std/strtabs
var t = {"name": "John", "city": "Monaco"}.newStringTableПри использовании режима нечувствительности к стилю (modeStyleInsensitive) все буквы сравниваются без учёта регистра в диапазоне ASCII, а подчёркивания игнорируются. Пример:
import std/strtabs var x = newStringTable(modeStyleInsensitive) x["first_name"] = "John" x["LastName"] = "Doe" doAssert x["firstName"] == "John" doAssert x["last_name"] == "Doe"Также предоставляется эффективный оператор подстановки строк % для таблицы строк.
Пример:
import std/strtabs
var t = {"name": "John", "city": "Monaco"}.newStringTable
doAssert "${name} lives in ${city}" % t == "John lives in Monaco"
См. также:- модуль tables для общих хеш-таблиц
- модуль sharedtables для поддержки общих хеш-таблиц
- модуль strutils для общих функций строк
- модуль json для таблично-подобной структуры, которая позволяет разнородные члены
Импорты
- since, hashes, strutils, envvars
Типы
FormatFlag = enum useEnvironment, ## Use environment variable if the ``$key`` ## is not found in the table. ## Does nothing when using `js` target. useEmpty, ## Use the empty string as a default, thus it ## won't throw an exception if ``$key`` is not ## in the table. useKey ## Do not replace ``$key`` if it is not found ## in the table (or in the environment).- Флаги для оператора
%. Исходный код Редактировать StringTableMode = enum modeCaseSensitive, ## the table is case sensitive modeCaseInsensitive, ## the table is case insensitive modeStyleInsensitive ## the table is style insensitive
- Описывает режим работы таблиц. Исходный код Редактировать
StringTableObj = object of RootObj
- Исходный код Редактировать
StringTableRef = ref StringTableObj
- Исходный код Редактировать
Процедуры
proc `$`(t: StringTableRef): string {....gcsafe, extern: "nstDollar", raises: [], tags: [], forbids: [].}- Оператор
$для таблиц строк. Используется внутри при вызовеechoдля таблицы. Исходный код Редактировать proc `%`(f: string; t: StringTableRef; flags: set[FormatFlag] = {}): string {. ...gcsafe, extern: "nstFormat", raises: [ValueError], tags: [ReadEnvEffect], forbids: [].}- Оператор
%для таблиц строк.Пример:
var t = {"name": "John", "city": "Monaco"}.newStringTable doAssert "${name} lives in ${city}" % t == "John lives in Monaco"Исходный код Редактировать proc `[]`(t: StringTableRef; key: string): var string {....gcsafe, extern: "nstTake", raises: [KeyError], tags: [], forbids: [].}-
Возвращает значение по ключу
t[key].Если
keyотсутствует вt, генерируется исключениеKeyError. Можно проверить наличие ключа с помощью метода hasKey.См. также:
- метод getOrDefault
- метод []= для добавления новой пары (ключ, значение) в таблицу
- метод hasKey для проверки наличия ключа в таблице
Пример:
var t = {"name": "John", "city": "Monaco"}.newStringTable doAssert t["name"] == "John" doAssertRaises(KeyError): echo t["occupation"]Исходный код Редактировать proc `[]=`(t: StringTableRef; key, val: string) {....gcsafe, extern: "nstPut", raises: [], tags: [], forbids: [].}-
Вставляет пару
(key, value)вt.См. также:
Пример:
var t = {"name": "John", "city": "Monaco"}.newStringTable t["occupation"] = "teacher" doAssert t.hasKey("occupation")Исходный код Редактировать proc clear(s: StringTableRef) {....raises: [], tags: [], forbids: [].}- Сбрасывает таблицу строк в пустое состояние, не изменяя режим. Исходный код Редактировать
proc clear(s: StringTableRef; mode: StringTableMode) {....gcsafe, extern: "nst$1", raises: [], tags: [], forbids: [].}-
Сбрасывает таблицу строк в пустое состояние, возможно, изменив режим.
См. также:
- метод del для удаления ключа из таблицы
Пример:
var t = {"name": "John", "city": "Monaco"}.newStringTable clear(t, modeCaseSensitive) doAssert len(t) == 0 doAssert "name" notin t doAssert "city" notin tИсходный код Редактировать proc contains(t: StringTableRef; key: string): bool {....raises: [], tags: [], forbids: [].}- Псевдоним метода hasKey для использования с оператором
in.Пример:
var t = {"name": "John", "city": "Monaco"}.newStringTable doAssert "name" in t doAssert "occupation" notin tИсходный код Редактировать proc del(t: StringTableRef; key: string) {....raises: [], tags: [], forbids: [].}-
Удаляет
keyизt.См. также:
- метод clear для сброса таблицы в пустое состояние
- метод []= для добавления новой пары (ключ, значение) в таблицу
Пример:
var t = {"name": "John", "city": "Monaco"}.newStringTable t.del("name") doAssert len(t) == 1 doAssert "name" notin t doAssert "city" in tИсходный код Редактировать proc getOrDefault(t: StringTableRef; key: string; default: string = ""): string {. ...raises: [], tags: [], forbids: [].}-
Возвращает значение по ключу
t[key].Если
keyотсутствует вt, возвращается значение по умолчанию (если не указано, пустая строка ("")).См. также:
- метод [] для получения значения по ключу
- метод hasKey для проверки наличия ключа в таблице
- метод []= для добавления новой пары (ключ, значение) в таблицу
Пример:
var t = {"name": "John", "city": "Monaco"}.newStringTable doAssert t.getOrDefault("name") == "John" doAssert t.getOrDefault("occupation") == "" doAssert t.getOrDefault("occupation", "teacher") == "teacher" doAssert t.getOrDefault("name", "Paul") == "John"Исходный код Редактировать proc hasKey(t: StringTableRef; key: string): bool {....gcsafe, extern: "nst$1", raises: [], tags: [], forbids: [].}-
Возвращает true, если
keyсодержится в таблицеt.См. также:
Пример:
var t = {"name": "John", "city": "Monaco"}.newStringTable doAssert t.hasKey("name") doAssert not t.hasKey("occupation")Исходный код Редактировать proc len(t: StringTableRef): int {....gcsafe, extern: "nst$1", raises: [], tags: [], forbids: [].}- Возвращает количество ключей в
t. Исходный код Редактировать proc mode(t: StringTableRef): StringTableMode {.inline, ...raises: [], tags: [], forbids: [].}- Исходный код Редактировать
proc newStringTable(keyValuePairs: varargs[string]; mode: StringTableMode): owned( StringTableRef) {....gcsafe, extern: "nst$1WithPairs", noSideEffect, ...raises: [], tags: [], forbids: [].}-
Создает новую таблицу строк с заданными парами
key, valueстрок.Необходимо указать
StringTableMode.Пример:
var mytab = newStringTable("key1", "val1", "key2", "val2", modeCaseInsensitive)Исходный код Редактировать proc newStringTable(keyValuePairs: varargs[tuple[key, val: string]]; mode: StringTableMode = modeCaseSensitive): owned( StringTableRef) {....gcsafe, extern: "nst$1WithTableConstr", noSideEffect, ...raises: [], tags: [], forbids: [].}-
Создает новую таблицу строк с заданными парами
(key, value)кортежей.По умолчанию режим регистрозависимый.
Пример:
var mytab1 = newStringTable({"key1": "val1", "key2": "val2"}, modeCaseInsensitive) mytab2 = newStringTable([("key3", "val3"), ("key4", "val4")])Исходный код Редактировать proc newStringTable(mode: StringTableMode): owned(StringTableRef) {....gcsafe, extern: "nst$1", noSideEffect, ...raises: [], tags: [], forbids: [].}-
Создает новую пустую таблицу строк.
См. также:
Исходный код Редактировать
Итераторы
iterator keys(t: StringTableRef): string {....raises: [], tags: [], forbids: [].}- Перебирает все ключи в таблице
t. Исходный код Редактировать iterator pairs(t: StringTableRef): tuple[key, value: string] {....raises: [], tags: [], forbids: [].}- Перебирает все пары
(key, value)в таблицеt. Исходный код Редактировать iterator values(t: StringTableRef): string {....raises: [], tags: [], forbids: [].}- Перебирает все значения в таблице
t. Исходный код Редактировать
© 2006–2024 Andreas Rumpf
Licensed under the MIT License.
https://nim-lang.org/docs/strtabs.html