Spec-Zone.ru › RethinkDB ruby

Команда 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. (Обратите внимание, что комбинирующие кодовые точки учитываются отдельно.)

Если вы указываете только индексы, а не параметры границ, вы можете использовать оператор диапазона Ruby в качестве сокращения: [start_offset..end_offset]. Обратите внимание, что при использовании этого сокращения right_bound будет closed, и, следовательно, будет включать end_offset.

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

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

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

r.table('players').filter({'class': 'amateur'})[10..19].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/ruby/slice/

Spec-Zone.ru

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