akanehara / ginq

`LINQ to Object` inspired DSL for PHP
MIT License
193 stars 18 forks source link

An empty list terminates flatMap (selectMany) sequence. #58

Closed sukobuto closed 9 years ago

sukobuto commented 9 years ago

flatMap のセレクタで空のリストを返却すると、その時点でシーケンスが中断されてしまいます。

空のリストがない場合は

Ginq::from(['a' => 2, 'b' => 3, 'c' => 4, 'd' => 5])
            ->flatMap(function($times, $key) {
                return Ginq::repeat($key, $times);
            });

以下のように正常に出力されます。

[
    '0' => "a",
    '1' => "a",
    '2' => "b",
    '3' => "b",
    '4' => "b",
    '5' => "c",
    '6' => "c",
    '7' => "c",
    '8' => "c",
    '9' => "d",
    '10' => "d",
    '11' => "d",
    '12' => "d",
    '13' => "d",
]   

空のリストが含まれる場合

Ginq::from(['a' => 2, 'b' => 0, 'c' => 4, 'd' => 5])
            ->flatMap(function($times, $key) {
                return Ginq::repeat($key, $times);
            });

以下のように後続の要素が無視されてしまいます。

[
    '0' => "a",
    '1' => "a",
]