protected function fetchIfValid() { if ($this->outer->valid()) { $outerV = $this->outer->current(); $outerK = $this->outer->key(); $compareKey = $this->outerCompareKeySelector->select($outerV, $outerK); $inners = $this->lookup->get($compareKey); $inners = new GroupingGinq(IteratorUtil::iterator($inners), $compareKey); $this->v = $this->resultValueSelector->select($outerV, $inners, $outerK, $compareKey); $this->k = $this->outer->key(); } }
/** * @param callable|array|string $lookupKeySelector (v, k) -> v * @param callable|array|string|null $elementSelector (v, k) -> v * @param EqualityComparer|null $eqComparer * @return LookupGinq */ public function toLookup($lookupKeySelector, $elementSelector = null, $eqComparer = null) { $lookupKeySelector = SelectorResolver::resolve($lookupKeySelector, ValueSelector::getInstance()); $elementSelector = SelectorResolver::resolve($elementSelector, ValueSelector::getInstance()); $lookup = new LookupGinq(EqualityComparerResolver::resolve($eqComparer, EqualityComparer::getDefault())); $it = $this->getIterator(); foreach ($it as $k => $v) { $lookup->put($lookupKeySelector->select($v, $k), $elementSelector->select($v, $k)); } return $lookup; }