首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Hacklang -按值搜索地图

Hacklang -按值搜索地图
EN

Stack Overflow用户
提问于 2015-07-11 14:19:45
回答 1查看 1.2K关注 0票数 0

G‘’day

在严格模式下,是否有一种通过值而不是键搜索Map的方法?

说我有地图:

代码语言:javascript
复制
$temp = Map{'melon', 'apple'};

我如何通过价值搜索?

EN

回答 1

Stack Overflow用户

发布于 2015-07-11 16:40:23

首先,示例中的Map不是有效的Map。Hack中的映射是键值对,而您只提供了键.我想这是个错误,您想给出的例子如下

代码语言:javascript
复制
$temp = Map {'fruit' => 'apple', 'veg' => 'carrot'};

要在Hack中搜索地图,您可以在PHP中执行相同的操作:在O(n)扫描中迭代它。下面是一个这样做的示例函数,它是用Hack泛型编写的,因此不管输入Map如何,它都有正确的类型。

代码语言:javascript
复制
function find_key<Tk, Tv>(Map<Tk, Tv> $haystack, Tv $needle): ?Tk {
  foreach ($haystack as $k => $v) {
    if ($v === $needle) {
      return $k;
    }
  }
  return null;
}

然而,最后一个问题是:你为什么要搜索这样的地图呢?映射的目的是对给定的键进行快速的值查找,以及对所有键/值对进行快速迭代。它们不是为像这样的值查找而设计的--这就是为什么它需要一个O(n)循环,它应该会发出警告信号,表明您正在做的事情可能不是最好的。您可能需要考虑使用更合适的数据结构:如果经常执行此操作,可以构建逆映射,或者根据需要使用集合或向量。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31358100

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档