zoukankan      html  css  js  c++  java
  • list类型

    list类型

    介绍

    列表类型(list)可以存储一个有序的字符串列表,常用的操作是向列表两端添加元素,或者获得列表的某一个片段。
    列表类型内部是使用双向链表(double linked list)实现的,所以向列表两端添加元素的时间复杂度为0(1),获取越接近两端的元素速度就越快。这意味着即使是一个有几千万个元素的列表,获取头部或尾部的10条记录也是极快的(和从只有20个元素的列表中获取头部或尾部的10条记录的速度是一样的)。

    命令

    1.向列表两端增加元素

    LPUSH key value [value …]
    RPUSH key value [value …]
    

    LPUSH命令用来向列表左边增加元素,返回值表示增加元素后列表的长度。
    向列表右边增加元素的话则使用RPUSH命令,其用法和LPUSH命令一样

    demo

    127.0.0.1:6380> lpush list1 0 1 2 3 4
    127.0.0.1:6380> rpush list1 -1 -2 -3 -4
    127.0.0.1:6380> lrange list1 0 -1
    1) "4"
    2) "3"
    3) "2"
    4) "1"
    5) "0"
    6) "-1"
    7) "-2"
    8) "-3"
    9) "-4"
    

    2.从列表两端弹出元素

    LPOP key
    RPOP key
    

    有进有出,LPOP命令可以从列表左边弹出一个元素。LPOP命令执行两步操作:第一步是将列表左边的元素从列表中移除,第二步是返回被移除的元素值。

    demo

    127.0.0.1:6380> lpop list1
    "4"
    127.0.0.1:6380> rpop list1
    "-4"
    127.0.0.1:6380> lrange list1 0 -1
    1) "3"
    2) "2"
    3) "1"
    4) "0"
    5) "-1"
    6) "-2"
    7) "-3"
    

    3.获取列表中元素的个数

    LLEN key
    

    demo

    127.0.0.1:6380> llen list1
    (integer) 7
    127.0.0.1:6380> llen list2
    (integer) 0
    

    4.获得列表片段

    LRANGE命令是列表类型最常用的命令之一,它能够获得列表中的某一片段。LRANGE命令将返回索引从start到stop之间的所有元素(包含两端的元素)。
    LRANGE命令在取得列表片段的同时不会像LPOP一样删除该片段

    LRANGE key start stop
    

    demo

    lrange list1 0 2
    127.0.0.1:6380> lrange list1 0 2
    1) "3"
    2) "2"
    3) "1"
    

    LRANGE命令也支持负索引,表示从右边开始计算序数,如"-1"表示最右边第一个元
    素,"-2"表示最右边第二个元素,依次类推:

    demo

    127.0.0.1:6380> lrange list1 -4 -1
    1) "0"
    2) "-1"
    3) "-2"
    4) "-3"
    

    5.删除列表中指定的值

    LREM key count value
    

    LREM命令会删除列表中前count个值为value的元素,返回值是实际删除的元素个数。根
    据count值的不同,LREM命令的执行方式会略有差异:
    ●当count>0时LREM命令会从列表左边开始删除前count个值为value的元素;
    ●当count<0时LREM 命令会从列表右边开始删除前|count|个值为value的元素;
    ●当count=0是LREM命令会删除所有值为value的元素。例如:

    demo

    127.0.0.1:6380> lpush list2 3 2 1 0 1 2 3
    (integer) 7
    127.0.0.1:6380> lrange list2 0 -1
    1) "3"
    2) "2"
    3) "1"
    4) "0"
    5) "1"
    6) "2"
    7) "3"
    127.0.0.1:6380> lrem list2 1 2
    (integer) 1
    127.0.0.1:6380> lrange list2 0 -1
    1) "3"
    2) "1"
    3) "0"
    4) "1"
    5) "2"
    6) "3"
    127.0.0.1:6380> lrem list2 -1 2
    (integer) 1
    127.0.0.1:6380> lrange list2 0 -1
    1) "3"
    2) "1"
    3) "0"
    4) "1"
    5) "3"
    

    6.获得/设置指定索引的元素值

    LINDEX key index
    LSET key index value
    

    LINDEX命令用来返回指定索引的元素,索引从0开始
    如果index是负数则表示从右边开始计算的索引,最右边元素的索引是-1

    demo

    127.0.0.1:6380> lindex list1 2
    "1"
    127.0.0.1:6380> lindex list1 -1
    "-3"
    

    LSET是另一个通过索引操作列表的命令,它会将索引为index的元素赋值为value

    127.0.0.1:6380> lset list1 1 7
    OK
    127.0.0.1:6380> lindex list1 1
    "7"
    127.0.0.1:6380> lset list1 -1 6
    OK
    127.0.0.1:6380> lindex list1 -1
    "6"
    

    7.只保留列表指定片段

    LTRIM key start end
    

    LTRIM命令可以删除指定索引范围之外的所有元素,其指定列表范围的方法和LRANGE命令相同

    demo

    127.0.0.1:6380> lrange list2 0 -1
    1) "3"
    2) "1"
    3) "0"
    4) "1"
    5) "3"
    127.0.0.1:6380> ltrim list2 0 2
    OK
    127.0.0.1:6380> lrange list2 0 -1
    1) "3"
    2) "1"
    3) "0"
    

    8.向列表中插入元素

    LINSERT key BEFORE|AFTER pivot value
    

    LINSERT命令首先会在列表中从左到右查找值为pivot的元素,然后根据第二个参数是BEFORE还是AFTER来决定将value插入到该元素的前面还是后面。
    LINSERT命令的返回值是插入后列表的元素个数。

    demo

    127.0.0.1:6380> lrange list2 0 -1
    1) "3"
    2) "1"
    3) "0"
    127.0.0.1:6380> linsert list2 after 1 rex
    (integer) 4
    127.0.0.1:6380> lrange list2 0 -1
    1) "3"
    2) "1"
    3) "rex"
    4) "0"
    127.0.0.1:6380> linsert list2 before 1 yang
    (integer) 5
    127.0.0.1:6380> lrange list2 0 -1
    1) "3"
    2) "yang"
    3) "1"
    4) "rex"
    5) "0"
    

    9.将元素从一个列表转到另一个列表

    RPOPLPUSH source destination
    

    demo

    127.0.0.1:6380> lrange list2 0 -1
    1) "3"
    2) "yang"
    3) "1"
    4) "rex"
    5) "0"
    127.0.0.1:6380> lrange list3 0 -1
    (empty list or set)
    127.0.0.1:6380> rpoplpush list2 list3
    "0"
    127.0.0.1:6380> lrange list3 0 -1
    1) "0"
    127.0.0.1:6380> rpoplpush list2 list3
    "rex"
    127.0.0.1:6380> lrange list3 0 -1
    1) "rex"
    2) "0"
    127.0.0.1:6380> lrange list3 0 -1
    1) "rex"
    2) "0"
    

    源和目标一致

    127.0.0.1:6380> lrange list3 0 -1
    1) "rex"
    2) "0"
    127.0.0.1:6380> rpoplpush list3 list3
    "0"
    127.0.0.1:6380> lrange list3 0 -1
    1) "0"
    2) "rex"
    
  • 相关阅读:
    【BZOJ】【1662】/【POJ】【3252】 【USACO 2006 Nov】Round Number
    【BZOJ】【1026】【SCOI2009】Windy数
    【HDOJ】【3555】Bomb
    【HDOJ】【2089】不要62
    【Ural】【1057】Amount of degrees
    【POJ】【3710】Christmas Game
    【BZOJ】【2940】【POI2000】条纹
    【POJ】【3537】Crosses and Crosses
    【POJ】【2068】Nim
    【POJ】【2960】S-Nim
  • 原文地址:https://www.cnblogs.com/rexyang1/p/6306322.html
Copyright © 2011-2022 走看看