Команда 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"
© RethinkDB contributors
Licensed under the Creative Commons Attribution-ShareAlike 3.0 Unported License.
https://rethinkdb.com/api/python/slice/