Esempio n. 1
0
 function testMixedOffsets()
 {
     $o = array(new O(), new O(), new O(), new O(), new O(), new O(), new O());
     $l = new L();
     $l->append(2, 3);
     $l->append(2, '4');
     $l->append(2, $o[0]);
     $this->assertEquals(1, count($l));
     $this->assertSame(array(2 => a(3, '4', $o[0])), $l->toArray());
     $this->assertSame(array(3, '4', $o[0]), $l[2]);
     $this->assertSame(array(), $l[3]);
     $l->append($o[1], 5);
     $l->append($o[1], '6');
     $l->append($o[1], $o[2]);
     $l->append($o[3], $o[2]);
     $this->assertEquals(3, count($l));
     $this->assertSame(array(2 => a(2, a(3, '4', $o[0])), id($o[1]) => a($o[1], a(5, '6', $o[2])), id($o[3]) => a($o[3], a($o[2]))), $l->toArray());
     $this->assertSame(array(3, '4', $o[0]), $l[2]);
     $this->assertSame(array(5, '6', $o[2]), $l[$o[1]]);
     $this->assertSame(array(), $l[$o[2]]);
     $l->append('a', 7);
     $l->append('a', true);
     $l->append('a', $o[4]);
     $l->append('b', $o[5]);
     $l->append('b', $o[5]);
     $l->append('c', $o[6]);
     $this->assertEquals(6, count($l));
     $this->assertSame(array(2 => a(2, a(3, '4', $o[0])), id($o[1]) => a($o[1], a(5, '6', $o[2])), id($o[3]) => a($o[3], a($o[2])), 'a' => a('a', a(7, true, $o[4])), 'b' => a('b', a($o[5], $o[5])), 'c' => a('c', a($o[6]))), $l->toArray());
     $this->assertSame(array(3, '4', $o[0]), $l[2]);
     $this->assertSame(array(), $l[3]);
     $this->assertSame(array(5, '6', $o[2]), $l[$o[1]]);
     $this->assertSame(array(), $l[$o[2]]);
     $this->assertSame(array(7, true, $o[4]), $l['a']);
     $this->assertSame(array($o[6]), $l['c']);
     $this->assertSame(array(), $l[$o[2]]);
     unset($l[$o[1]]);
     unset($l['a']);
     unset($l[2]);
     $this->assertEquals(3, count($l));
     $this->assertSame(array(id($o[3]) => a($o[3], a($o[2])), 'b' => a('b', a($o[5], $o[5])), 'c' => a('c', a($o[6]))), $l->toArray());
     unset($l[id($o[3])]);
     unset($l['b']);
     unset($l['c']);
     unset($l['d']);
     $this->assertEquals(0, count($l));
     $this->assertSame(array(), $l->toArray());
 }
Esempio n. 2
0
 /**
  * <p><b>Syntax</b>: toLookup ([keySelector {{(v, k) ==> key} [, valueSelector {{(v, k) ==> value}]])
  * <p>Creates a {@link Lookup} from a sequence according to specified key selector and value selector functions.
  * <p>The toLookup method returns a Lookup, a one-to-many dictionary that maps keys to collections of values.
  * @param callable|null $keySelector {(v, k) ==> key} A function to extract a key from each element. Default: key.
  * @param callable|null $valueSelector {(v, k) ==> value} A transform function to produce a result value from each element. Default: value.
  * @return collections\Lookup A Lookup that contains values selected from the input sequence.
  */
 public function toLookup($keySelector = null, $valueSelector = null)
 {
     $keySelector = Utils::createLambda($keySelector, 'v,k', Functions::$key);
     $valueSelector = Utils::createLambda($valueSelector, 'v,k', Functions::$value);
     $lookup = new c\Lookup();
     foreach ($this as $k => $v) {
         $lookup->append(call_user_func($keySelector, $v, $k), call_user_func($valueSelector, $v, $k));
     }
     return $lookup;
 }