Spec-Zone.ru › Nim

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.

См. также:

  • метод [] для получения значения по ключу
  • метод del для удаления ключа из таблицы

Пример:

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.

См. также:

  • метод getOrDefault
  • метод contains

Пример:

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: [].}

Создает новую пустую таблицу строк.

См. также:

  • newStringTable(keyValuePairs) proc
Исходный код Редактировать

Итераторы

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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API