Итерация по нескольким итераторам одновременно в особом порядке

Допустим, у меня есть два итератора:

$a = new ArrayIterator(array(4, 3, 2));
$b = new ArrayIterator(array(6, 5, 1));

Теперь я хочу перебрать их таким образом, чтобы вывести следующее:

 a b sum

4 6  10
4 5  9
3 6  9
3 5  8
2 6  8
2 5  7
4 1  5
3 1  4
2 1  3

Поэтому я хочу перебрать все возможные комбинации. Кроме того, я хочу, чтобы на первом месте были те, которые суммировали наибольшее значение.

Я не хочу использовать массивы (поэтому также нет сортировки массивов), мне нужно делать это с итераторами (из-за ограничений из моего исходного случая).

1

Решение

Это ваш заказ, который бросает вещи. Вы не можете сделать это без какой-либо формы сортировки; но вариант структуры данных кучи может быть вариантом:

$a = new ArrayIterator(array(4, 2, 3));
$b = new ArrayIterator(array(1, 6, 5));

class MyHeap extends SplHeap {
public function compare($v1, $v2) {
if ($v1->sum === $v2->sum) return 0;
return $v1->sum < $v2->sum ? -1 : 1;
}
}

$heap = new MyHeap();
foreach($a as $val1) {
foreach($b as $val2) {
$heap->insert(
(object) [
'val1' => $val1,
'val2' => $val2,
'sum' => $val1+$val2
]
);
}
}

$heap->top();
foreach($heap as $value) {
echo $value->val1, ' ', $value->val2, ' ', $value->sum, PHP_EOL;
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]