当前位置: 首页 > 面试题库 >

通过Redis列表中的值获取项目的索引

董良策
2023-03-14
问题内容

我有一个已创建的Redis列表,此刻我将它用作队列,偶尔会反向。我的问题是我希望能够按值获取该队列/列表上某项的索引。

如果我具有以下值的列表:

{"dan","eduardo","pedro"}

索引将是:

0 : "dan"
1 : "eduardo"
2 : "pedro"

我希望能够通过传递值来获取列表中该值的索引。

像“ eduardo”一样,返回“ 1”。

如果可以的话,那怎么可能呢?

我还应该说的是,我正在对列表执行队列命令,从顶部删除项目,然后在底部添加项目。

我目前正在使用node.js 0.6.6和最新的redis模块以及最新的redis版本2.4.4。

我为redis-cli中的解决方案感到高兴。

此外,没有其他限制,那么必须可以单独使用redis进行操作,没有外部进程等,但是如果要对lua go使用EVAL命令。

编辑

另外,我认为我的答案可能是在排序的集合上而不是队列上。


问题答案:

我不知道它的nodejs客户端详细信息,但是以下是lua中非常简单的indexOf命令的实现。

在我的文件中,indexof.lua我有以下代码:

local key = KEYS[1]
local obj = ARGV[1]
local items = redis.call('lrange', key, 0, -1)
for i=1,#items do
    if items[i] == obj then
        return i - 1
    end
end 
return -1

让我们将一些值推到mylist

> rpush mylist foo bar baz qux
(integer) 4

我们可以使用lua脚本在列表中找到任何值的索引。该命令为O(N)。

$ redis-cli --eval indexof.lua mylist , bar
(integer) 1

的索引bar为1

> lindex mylist 1
"bar"

的索引nil是-1

$ redis-cli --eval indexof.lua mylist , nil
(integer) -1

请参阅有关EVAL命令的http://redis.io/commands/eval其他文档。



 类似资料:
  • 本文向大家介绍sharepoint 通过ID获取列表项,包括了sharepoint 通过ID获取列表项的使用技巧和注意事项,需要的朋友参考一下 示例            

  • 我有一个方法返回一个

  • 问题内容: 我有一段代码应该在其中创建总机。我想返回所有打开的开关的列表。这里的“开”等于和“关”等于。因此,现在我只想返回所有值及其位置的列表。这就是我所拥有的,但它只返回第一次出现的位置(这只是我的代码的一部分): 这只会返回“ 4” 问题答案: 使用,返回找到的第一个匹配项的索引。 对于庞大的列表,最好使用:

  • 本文向大家介绍sharepoint 通过CAML查询获取列表项,包括了sharepoint 通过CAML查询获取列表项的使用技巧和注意事项,需要的朋友参考一下 示例 基本范例 使用对象的set_viewXml方法SP.CamlQuery指定CAML查询以检索项目。 分页CAML查询的结果 您可以利用RowLimitCAML查询中的元素在每个查询中仅检索结果的子集。 使用get_listItemCo

  • 问题内容: 我有一个清单清单: 搜索列表并返回其中一项的位置的最干净方法是什么? 我已经看过该方法,但是似乎并没有在列表中解压缩列表。 给出:,不是我所期望的… 问题答案: 我会做这样的事情: 这将返回一个元组列表,其中第一个索引是第一个列表中的位置,第二个索引是第二个列表中的位置(注意:您要查找的颜色,即)。 对于问题中的示例,返回值为: 如果您只需要懒惰地找到找到颜色的第一个位置,则可以使用以

  • 问题内容: 可以说我有以下代码: 有没有一种方法可以以编号方式访问项目,例如: 问题答案: 如果是,则可以通过获取(key,value)对的元组的索引来轻松访问元素,如下所示 Python 3.X的注意事项 将返回一个可迭代的dict视图对象而不是一个列表。我们需要将调用包装到一个列表上,以使建立索引成为可能