Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails id与名称ruby的双向查找_Ruby On Rails_Ruby - Fatal编程技术网

Ruby on rails id与名称ruby的双向查找

Ruby on rails id与名称ruby的双向查找,ruby-on-rails,ruby,Ruby On Rails,Ruby,我有一个散列,其中id是键,name是值。id和值都是唯一的 大概是这样的: h[1] = "ABC" h[3] = "DEF" 因此,如果给我1的键,我可以很容易地返回一个值“ABC” 我还需要执行反向查找,这意味着如果给我一个“DEF”值,我应该返回3 此外,不使用单个值或单个键进行查找, 我可能会被提供一个值数组或键数组 我应该实现两个散列,每个散列一个,还是在ruby或rails中有其他方法来实现这一点 编辑:这个问题与在散列中通过键的值查找键无关。它与不在O(n)时间内使用更好的方法

我有一个散列,其中
id
是键,
name
是值。
id和值都是唯一的

大概是这样的:

h[1] = "ABC"
h[3] = "DEF"
因此,如果给我1的键,我可以很容易地返回一个值“ABC”

我还需要执行
反向查找
,这意味着如果给我一个“DEF”值,我应该返回3

此外,不使用单个值或单个键进行查找,
我可能会被提供一个值数组或键数组

我应该实现两个散列,每个散列一个,还是在ruby或rails中有其他方法来实现这一点


编辑:这个问题与在散列中通过键的值查找键无关。它与不在O(n)时间内使用更好的方法进行双向查找有关,而不是创建两个单独的哈希

您可以通过以下方式获取密钥:
hash.key(value)=>key

您可以按如下方式使用

reversed_h = h.invert

reversed_h['DEF']
# => 3

复杂性呢?@Bhawan:这正是你所认为的:)这里绝对没有O(1)。>我可能会得到一个值数组或键数组。解决方法取决于你在这个问题上能找到什么case@Bhawan如果按值搜索是一次搜索,则这是最优先的方式。@SergioTulentsev,它小于O(n)?如果您的哈希值很大,并且需要两次查找都很快,并且您将进行大量查找,则创建两次哈希。总共只有400次entries@SebastianPalma,我在编辑中解释了为什么我的问题不同。它在内部创建一个新的哈希。@Bhawan是的,如果您的“反向查找”被使用了多少次,那么您应该更喜欢使用此解决方案,它最初需要花费时间进行反向查找&以后您可以按值搜索多个键。我需要执行与正向查找相同的反向查找次数。因此,我认为这个答案是最好的。
h.values\u at(*ar\u of_key)
用于获取多个值
reversed_h = h.invert

reversed_h['DEF']
# => 3