问题描述
我试图找出如何从\Generator()
获取键来产生数组值的方法。
我实际上在做什么:
function t(): \Generator {
yield from [
'hello' => 0,'yellow' => 1,'coco' => 2,];
}
$keys = \array_keys(\iterator_to_array(t()));
var_dump($keys);
array(3) {
// [0]=>
// string(5) "hello"
// [1]=>
// string(6) "yellow"
// [2]=>
// string(6) "grolow"
// }
执行此操作的有效方法是什么?
解决方法
这取决于您所说的高效。如果一次要所有密钥,最好的选择是迭代并逐个获得密钥。对于大型阵列和内存效率,我认为最好再创建一个生成器。
function t()
{
yield from [
'hello' => 0,'yellow' => 1,'coco' => 2,];
}
function t_key()
{
foreach (t() as $key => $value) {
yield $key;
}
}
但这是比您的解决方案慢2倍的解决方案。
for ($i = 0; $i < 10000; $i++) {
$keys = \iterator_to_array(t_key());
}
时间:0.04707407951355 s
for ($i = 0; $i < 10000; $i++) {
$keys = \array_keys(\iterator_to_array(t()));
}
时间:0.023930072784424 s