使用值作为数组中的键,以降低搜索项目时的复杂性


Using values as keys in arrays to reduce complexity when searching for items

有时候我在PHP中做了很多事情。 大海捞针。

$names = [
    'Mike',
    'John',
    'Dave',
    'Tony'
];
$gotDave = in_array('Dave', $names);

in_array 的运行时间为 O(n),其中 n 是元素的数量。

我经常将查找数据结构设置为如下所示。

$names = [
    'Mike' => true,
    'John' => true,
    'Dave' => true,
    'Tony' => true
];
$gotDave = isset($names['Dave']);

运行时是 O(1),因为在 php 中,关联数组是一个哈希映射。

一些问题:

  • 我应该这样做吗? 这是好的做法吗?
  • 右舵骑行是否有更好的价值

是的,这是一个很好的解决方案。事实上,这就是大多数编程语言的核心库中实现Sets的方式 - 在我的头顶上,Python,Ruby和Java都是这样做的。Go 语言不提供 Set,只是告诉你做你已经做过的事情。

我想不出任何理由使用真正的"true"以外的任何值。这是有道理的。

您可以使用

array_key_exists()来检查数组的键,这与检查值in_array不同

在这种情况下,您将不得不使用array_key_exists()而不是isset()