LPOS
Available since: 6.0.6 Time complexity: O(N) where N is the number of elements in the list, for the average case. When searching for elements near the head or the tail of the list, or when the MAXLEN option is provided, the command may run in constant time. ACL categories: @read , @list , @slow ,
The command returns the index of matching elements inside a Redis list. By default, when no options are given, it will scan the list from head to tail, looking for the first match of «element». If the element is found, its index (the zero-based position in the list) is returned. Otherwise, if no match is found, nil is returned.
> RPUSH mylist a b c 1 2 3 c c > LPOS mylist c 2
The optional arguments and options can modify the command’s behavior. The RANK option specifies the «rank» of the first element to return, in case there are multiple matches. A rank of 1 means to return the first match, 2 to return the second match, and so forth.
For instance, in the above example the element «c» is present multiple times, if I want the index of the second match, I’ll write:
> LPOS mylist c RANK 2 6
That is, the second occurrence of «c» is at position 6. A negative «rank» as the RANK argument tells LPOS to invert the search direction, starting from the tail to the head.
So, we want to say, give me the first element starting from the tail of the list:
> LPOS mylist c RANK -1 7
Note that the indexes are still reported in the «natural» way, that is, considering the first element starting from the head of the list at index 0, the next element at index 1, and so forth. This basically means that the returned indexes are stable whatever the rank is positive or negative.
Sometimes we want to return not just the Nth matching element, but the position of all the first N matching elements. This can be achieved using the COUNT option.
> LPOS mylist c COUNT 2 [2,6]
We can combine COUNT and RANK , so that COUNT will try to return up to the specified number of matches, but starting from the Nth match, as specified by the RANK option.
> LPOS mylist c RANK -1 COUNT 2 [7,6]
When COUNT is used, it is possible to specify 0 as the number of matches, as a way to tell the command we want all the matches found returned as an array of indexes. This is better than giving a very large COUNT option because it is more general.
> LPOS mylist c COUNT 0 [2,6,7]
When COUNT is used and no match is found, an empty array is returned. However when COUNT is not used and there are no matches, the command returns nil .
Finally, the MAXLEN option tells the command to compare the provided element only with a given maximum number of list items. So for instance specifying MAXLEN 1000 will make sure that the command performs only 1000 comparisons, effectively running the algorithm on a subset of the list (the first part or the last part depending on the fact we use a positive or negative rank). This is useful to limit the maximum complexity of the command. It is also useful when we expect the match to be found very early, but want to be sure that in case this is not true, the command does not take too much time to run.
When MAXLEN is used, it is possible to specify 0 as the maximum number of comparisons, as a way to tell the command we want unlimited comparisons. This is better than giving a very large MAXLEN option because it is more general.
Return
The command returns the integer representing the matching element, or nil if there is no match. However, if the COUNT option is given the command returns an array (empty if there are no matches).
Examples
This is a community website sponsored by Redis Ltd. © 2023. Redis and the cube logo are registered trademarks of Redis Ltd. Terms of use & privacy policy.
ПО LPOS включено в Единый реестр российских программ для ЭВМ и БД
Программное обеспечение «LPOS», разработанное Компанией ООО «НСК Коммуникации Сибири», приказом Минкомсвязи России N421 от 15.07.2017г. добавлено в единый реестр российских программ для электронных вычислительных машин и баз данных.
Реестр создан в соответствии со статьей 12.1 Федерального закона «Об информации, информационных технологиях и о защите информации» в целях расширения использования российских программ для электронных вычислительных машин и баз данных, подтверждения их происхождения из Российской Федерации, а также в целях оказания правообладателям программ для электронных вычислительных машин или баз данных мер государственной поддержки.
Реестр содержит сведения обо всем программном обеспечении, которое официально признано происходящим из Российской Федерации.
- Новое оборудование
- Новые версии LPOS и NMS
- Bootloader 1.0.2.3
- Набор функций
- SDH мультиплексоры
- Новые Sprinter TX (SFP) c 2-умя E1
- Новые возможности мультиплексоров-коммутаторов «Sprinter TX»
- Изменение юридического адреса и КПП
- Поддержка протоколов SAToP и CESoPSN
- Соответствие Критериям локализации ПАО Ростелеком
- ПО LPOS включено в Единый реестр российских программ для ЭВМ и БД
- ООО «НСК Коммуникации Сибири» победитель конкурса «Развитие-НТИ» от Фонда содействия инновациям
Объявления
- Оборудование Sprinter TX (24SFP) снято с производства
- Доступно для заказа новое оборудование Антивандальный IP-громкоговоритель Sprinter SL AV для построения систем оповещения и громкой связи
- Доступны для заказа новые модели Sprinter TX (20) c 10 Gigabit Ethernet интерфейсами и 24 либо 16 интерфейсами E1
- Доступна для заказа новая модель Sprinter TX (12) c 10 Gigabit Ethernet интерфейсами
- Компания ООО «НСК Коммуникации Сибири» в списке победителей конкурса «Развитие-НТИ» шестой очереди от Фонда содействия инновациям. Подробнее.
- Программное обеспечение LPOS, разработанное Компанией ООО «НСК Коммуникации Сибири», приказом Минкомсвязи России N421 от 15.07.2017г. добавлено в единый реестр российских программ для электронных вычислительных машин и баз данных. Читать далее.
- Компания ООО «НСК Коммуникации Сибири» добавлена в Реестр Компаний, соответствующих Критериям локализации компаний разработчиков/производителей телекоммуникационного оборудования и программного обеспечения, участвующих в закупках ПАО «Ростелеком» в рамках импортозамещения. Читать далее.
- Добавлена поддержка технологии передачи потоков E1 с помощью создания виртуального соединения поверх пакетной сети по протоколам SAToP и CESoPSN. Это позволяет передавать потоки E1 между нашим оборудованием и оборудованием сторонних производителей, например, таких как RAD Data Communications. Читать далее.
- С 15.03.2017г. у ООО «НСК Коммуникации Сибири» изменился юридический адрес и код постановки на учет в налоговом органе. Подробнее.
- Обновлена информация о преимуществах технологии TDMoP по сравнению с PDH/SDH. Передача потоков E1 может происходить без прерываний, при переключениях на резервный канал связи. Читать далее.
- Доступны для заказа новые модули Sprinter TX (SFP) c 2-мя E1 в форм-факторе SFP
- Sprinter TX(48), TX(FE), TX(GE) сняты с производства
Авторизация
Новости
ООО «НСК Коммуникации Сибири» победитель конкурса «Развитие-НТИ» шестой очереди от Фонда содействия инновациям
6 ноября 2020 года протоколом заседания дирекции Фонда содействия инновациям были утверждены итоги шестой очереди конкурсного отбора по конкурсу «Развитие-НТИ».
По итогам конкурса компании выделен грант в размере 20 миллионов рублей на реализацию проекта «Разработка роботизированного реабилитационного комплекса для функциональной терапии нижних конечностей с системой биологической обратной связи и виртуальной реальности»
Фонд содействия инновациям — государственная некоммерческая организация в форме федерального государственного бюджетного учреждения, образованная в соответствии с постановлением Правительства Российской Федерации от 3 февраля 1994 г. №65
ПО LPOS включено в Единый реестр российских программ для ЭВМ и БД
Программное обеспечение «LPOS», разработанное Компанией ООО «НСК Коммуникации Сибири», приказом Минкомсвязи России N421 от 15.07.2017г. добавлено в единый реестр российских программ для электронных вычислительных машин и баз данных.
Реестр создан в соответствии со статьей 12.1 Федерального закона «Об информации, информационных технологиях и о защите информации» в целях расширения использования российских программ для электронных вычислительных машин и баз данных, подтверждения их происхождения из Российской Федерации, а также в целях оказания правообладателям программ для электронных вычислительных машин или баз данных мер государственной поддержки.
Реестр содержит сведения обо всем программном обеспечении, которое официально признано происходящим из Российской Федерации.
LPOS
Сложность по времени: O (N), где N — количество элементов в списке для среднего случая. При поиске элементов рядом с заголовком или концом списка или когда предоставляется опция MAXLEN, команда может выполняться с постоянным временем.
Команда возвращает индекс совпадающих элементов внутри списка Redis.По умолчанию,когда опции не заданы,команда сканирует список от начала до конца,ища первое совпадение «элемента».Если элемент найден,возвращается его индекс (нулевая позиция в списке).В противном случае,если совпадение не найдено,возвращается NULL.
> RPUSH mylist a b c 1 2 3 c c > LPOS mylist c 2
Необязательные аргументы и параметры могут изменять поведение команды. Параметр RANK указывает «ранг» первого возвращаемого элемента в случае нескольких совпадений. Ранг 1 означает возврат первого совпадения, 2 — второго совпадения и так далее.
Например,в приведенном выше примере элемент «c» встречается несколько раз,если мне нужен индекс второго совпадения,я напишу:
> LPOS mylist c RANK 2 6
То есть второе вхождение «c» находится в позиции 6. Отрицательный «ранг», поскольку аргумент RANK указывает LPOS инвертировать направление поиска, начиная с хвоста к голове.
Итак,мы хотим сказать:»Дайте мне первый элемент,начиная с хвоста списка»:
> LPOS mylist c RANK -1 7
Обратите внимание,что индексы все еще представляются «естественным» образом,то есть,рассматривая первый элемент,начиная с головы списка,с индексом 0,следующий элемент с индексом 1,и так далее.Это означает,что возвращаемые индексы стабильны,независимо от того,положительный или отрицательный ранг.
Иногда мы хотим вернуть не только N-й совпадающий элемент, но и позицию всех первых N совпадающих элементов. Этого можно добиться с помощью опции COUNT .
> LPOS mylist c COUNT 2 [2,6]
Мы можем объединить COUNT и RANK , так что COUNT будет пытаться вернуться до указанного количества совпадений, но начиная с N-го совпадения, как указано опцией RANK .
> LPOS mylist c RANK -1 COUNT 2 [7,6]
Когда используется COUNT , можно указать 0 как количество совпадений, чтобы сообщить команде, что мы хотим, чтобы все найденные совпадения возвращались в виде массива индексов. Это лучше, чем задавать очень большой параметр COUNT , потому что он более общий.
> LPOS mylist c COUNT 0 [2,6,7]
Когда используется COUNT и совпадений не найдено, возвращается пустой массив. Однако, когда COUNT не используется и совпадений нет, команда возвращает NULL.
Наконец, опция MAXLEN указывает команде сравнивать предоставленный элемент только с заданным максимальным количеством элементов списка. Так, например, указание MAXLEN 1000 гарантирует, что команда выполняет только 1000 сравнений, эффективно выполняя алгоритм на подмножестве списка (первая часть или последняя часть в зависимости от того, используется ли положительный или отрицательный ранг). Это полезно для ограничения максимальной сложности команды. Это также полезно, когда мы ожидаем, что совпадение будет обнаружено очень рано, но хотим быть уверены, что в случае, если это не так, выполнение команды не займет слишком много времени.
Когда используется MAXLEN , можно указать 0 как максимальное количество сравнений, чтобы указать команде, что мы хотим неограниченное число сравнений. Это лучше, чем давать очень большой параметр MAXLEN , потому что он более общий.
Return value
Команда возвращает целое число, представляющее совпадающий элемент, или ноль, если совпадения нет. Однако, если задана опция COUNT , команда возвращает массив (пустой, если совпадений нет).
Examples
redis> RPUSH mylist a b c d 1 2 3 4 3 3 3 (integer) 11 redis> LPOS mylist 3 (integer) 6 redis> LPOS mylist 3 COUNT 0 RANK 2 1) (integer) 8 2) (integer) 9 3) (integer) 10
При подготовке материала использовались источники:
https://redis.io/commands/lpos/
https://www.nsc-com.com/about/news/lpos-reestr-minsvyaz
https://runebook.dev/ru/docs/redis/lpos