G‘’day
在严格模式下,是否有一种通过值而不是键搜索Map的方法?
说我有地图:
$temp = Map{'melon', 'apple'};我如何通过价值搜索?
发布于 2015-07-11 16:40:23
首先,示例中的Map不是有效的Map。Hack中的映射是键值对,而您只提供了键.我想这是个错误,您想给出的例子如下
$temp = Map {'fruit' => 'apple', 'veg' => 'carrot'};要在Hack中搜索地图,您可以在PHP中执行相同的操作:在O(n)扫描中迭代它。下面是一个这样做的示例函数,它是用Hack泛型编写的,因此不管输入Map如何,它都有正确的类型。
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)循环,它应该会发出警告信号,表明您正在做的事情可能不是最好的。您可能需要考虑使用更合适的数据结构:如果经常执行此操作,可以构建逆映射,或者根据需要使用集合或向量。
https://stackoverflow.com/questions/31358100
复制相似问题