Spec-Zone.ru › RethinkDB python

Команда ReQL: slice, []

Синтаксис команды

selection.slice(start_offset[, end_offset, left_bound='closed', right_bound='open']) → selection
stream.slice(start_offset[, end_offset, left_bound='closed', right_bound='open']) → stream
array.slice(start_offset[, end_offset, left_bound='closed', right_bound='open']) → array
binary.slice(start_offset[, end_offset, left_bound='closed', right_bound='open']) → binary
string.slice(start_offset[, end_offset, left_bound='closed', right_bound='open']) → string

Описание

Возвращает элементы последовательности в заданном диапазоне.

slice возвращает диапазон между start_offset и end_offset. Если указан только start_offset, slice возвращает диапазон от этого индекса до конца последовательности. Укажите left_bound или right_bound как open или closed для указания включения конечной точки диапазона по умолчанию: closed включает эту конечную точку, а open - нет. По умолчанию left_bound является закрытой, а right_bound - открытой, поэтому диапазон (10,13) вернёт десятый, одиннадцатый и двенадцатый элементы в последовательности.

Если end_offset находится за пределами последовательности, будут возвращены все элементы от start_offset до конца последовательности. Если start_offset находится за пределами последовательности или end_offset меньше start_offset, будет возвращена последовательность нулевой длины.

Допускаются отрицательные значения start_offset и end_offset для массивов; в этом случае возвращаемый диапазон отсчитывается от конца массива. То есть диапазон (-2) возвращает два последних элемента, а диапазон (2,-1) возвращает второй элемент и все последующие до предпоследнего. Ошибка возникнет при использовании отрицательного start_offset или end_offset с не-массивами. (Отрицательное значение end_offset -1 допускается для потока, если right_bound закрыта; это эквивалентно тому, что end_offset не указано.)

Если slice используется с объектом binary, индексы относятся к позициям байтов в объекте. То есть диапазон (10,20) будет ссылаться на 10-й байт до 19-го включительно.

С строкой slice работает аналогично, при этом индексы относятся к кодам Юникода. Индексы строк начинаются с 0. (Обратите внимание, что комбинирующие кодовые точки считаются отдельно.)

Если вы указываете только индексы, а не параметры границ, можете использовать оператор среза Python в сокращённом виде: [start_offset:end_offset].

Пример: Возвращает четвёртого, пятого и шестого самых молодых игроков. (Самый молодой игрок имеет индекс 0, поэтому это элементы 3–5.)

r.table('players').order_by(index='age').slice(3,6).run(conn)

Или, используя оператор среза Python:

r.table('players').filter({'class': 'amateur'})[10:20].run(conn)

Пример: Возвращает всех игроков, кроме трёх лучших, у которых красный флажок.

r.table('players').filter({'flag': 'red'}).order_by(index=r.desc('score')).slice(3).run(conn)

Пример: Возвращает держателей билетов X по Y, предполагая, что билеты пронумерованы последовательно. Нам нужно включить билет Y.

r.table('users').order_by(index='ticket').slice(x, y, right_bound='closed').run(conn)

Пример: Возвращает элементы массива со второго по предпоследний (то есть не включая два последних).

r.expr([0,1,2,3,4,5]).slice(2,-2).run(conn)
[2,3]

Пример: Возвращает третий по пятый символы строки.

> r.expr("rutabaga").slice(2,5).run(conn)
"tab"

Связанные команды

  • order_by
  • skip
  • limit
  • nth, []

© RethinkDB contributors
Licensed under the Creative Commons Attribution-ShareAlike 3.0 Unported License.
https://rethinkdb.com/api/python/slice/

Spec-Zone.ru

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