Команда ReQL: slice
Синтаксис команды
selection.slice(startOffset[, endOffset]) → selection stream.slice(startOffset[, endOffset]) → stream array.slice(startOffset[, endOffset]) → array binary.slice(startOffset[, endOffset]) → binary string.slice(startOffset[, endOffset]) → string
Описание
Возвращает элементы последовательности в заданном диапазоне.
slice возвращает диапазон между startOffset и endOffset. Если указан только startOffset, slice возвращает диапазон от этого индекса до конца последовательности. Используйте optArgs left_bound или right_bound в качестве open или closed, чтобы указать, включать ли конечную точку диапазона по умолчанию: closed включает конечную точку, а open — нет. По умолчанию left_bound закрыта, а right_bound открыта, поэтому диапазон (10,13) вернёт десятый, одиннадцатый и двенадцатый элементы в последовательности.
Если endOffset выходит за пределы последовательности, будут возвращены все элементы от startOffset до конца последовательности. Если startOffset выходит за пределы последовательности или endOffset меньше startOffset, будет возвращена последовательность нулевой длины.
Допускаются отрицательные значения startOffset и endOffset для массивов; в этом случае возвращаемый диапазон отсчитывается от конца массива. То есть, диапазон (-2) возвращает два последних элемента, а диапазон (2,-1) возвращает второй элемент и все элементы до предпоследнего. Ошибка будет выброшена при отрицательном startOffset или endOffset с не-массивом. (Значение endOffset равно −1 разрешено для потока, если rightBound закрыта; это эквивалентно тому, что endOffset не указан.)
Если slice используется с объектом binary, индексы относятся к байтовым позициям в объекте. То есть, диапазон (10,20) будет ссылаться на 10-й байт и до 19-го байта.
Со строкой slice работает аналогично, при этом индексы относятся к кодам Юникода. Индексы строк начинаются с 0. (Обратите внимание, что комбинированные символы учитываются отдельно.)
Пример: Возвращает четвертого, пятого и шестого самых молодых игроков. (Самый молодой игрок имеет индекс 0, поэтому это элементы 3–5.)
r.table("players").orderBy().optArg("index", "age").slice(3, 6).run(conn);
Пример: Возвращает всех игроков, кроме трёх лучших, у которых красный флажок.
r.table("players").filter(r.hashMap("flag", "red")).orderBy()
.optArg("index", r.desc("score")).slice(3).run(conn);
Пример: Возвращает держателей билетов X по Y, предполагая, что билеты пронумерованы последовательно. Мы хотим включить билет Y.
r.table("users").orderBy().optArg("index", "ticket")
.slice(x, y).optArg("right_bound", "closed").run(conn);
Пример: Возвращает элементы массива со второго по предпоследний (то есть, не включая два последних).
r.expr(r.array(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/java/slice/