Допустим, у меня есть два итератора:
$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
Поэтому я хочу перебрать все возможные комбинации. Кроме того, я хочу, чтобы на первом месте были те, которые суммировали наибольшее значение.
Я не хочу использовать массивы (поэтому также нет сортировки массивов), мне нужно делать это с итераторами (из-за ограничений из моего исходного случая).
Это ваш заказ, который бросает вещи. Вы не можете сделать это без какой-либо формы сортировки; но вариант структуры данных кучи может быть вариантом:
$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;
}
Других решений пока нет …