sanmai / lazy-linq
此包已被弃用且不再维护。未建议替代包。
支持强制懒加载的.NET LINQ库
v0.6
2020-01-31 03:26 UTC
Requires
- php: ^7.0
- sanmai/pipeline: ^2 || ^3 || ^4
Requires (Dev)
- codacy/coverage: ^1.4
- friendsofphp/php-cs-fixer: ^2.11
- infection/infection: >=0.8
- mockery/mockery: ^1.0
- phan/phan: >=0.11
- php-coveralls/php-coveralls: ^2.0
- phpstan/phpstan: >=0.9
- phpunit/phpunit: >=6
- vimeo/psalm: >=1.1
This package is auto-updated.
Last update: 2021-01-02 15:20:30 UTC
README
此库实现了.NET静态类System.Linq.Enumerable中的大多数API方法,这些方法不需要将整个数据集加载到内存中。如果你习惯于.NET中的LINQ查询操作,你应该会感到宾至如归。
由生成器驱动,此库以懒加载方式工作:它不会一次性对整个序列进行计算,而是在你遍历序列时仅进行必要的计算。
安装
composer require sanmai/lazy-linq
API兼容性
| 方法 | 详细信息 | |
|---|---|---|
| ✔️ | Aggregate() | |
| ✔️ | All() | |
| ✔️ | Any() | |
| ✔️ | Append() | 返回一个新集合。 |
| AsEnumerable() | 不适用于PHP。 | |
| ✔️ | Average() | |
| ✔️ | Cast() | |
| ✔️ | Concat() | |
| ✔️ | Contains() | |
| ✔️ | Count() | |
| DefaultIfEmpty() | 不适用。 | |
| ✔️ | Distinct() | 仅移除重复元素,相当于uniq。 |
| ✔️ | ElementAt() | @throws 💣 |
| ✔️ | ElementAtOrDefault() | 默认值为null,@throws 💣 |
| ✔️ | Empty() | 返回一个新空集合。 |
| ✔️ | Except() | 返回一个新集合。 |
| ✔️ | First() | |
| FirstOrDefault() | PHP中的集合没有类型。 | |
| GroupBy() | 需要一次性获取所有数据。 | |
| GroupJoin() | ||
| Intersect() | ||
| Join() | ||
| ✔️ | Last() | |
| LastOrDefault() | 不适用。 | |
| LongCount() | PHP中没有单独的long类型。 |
|
| ✔️ | Max() | |
| ✔️ | Min() | |
| ✔️ | OfType() | 还有用于类的ofClass()。 |
| OrderBy() | 需要将整个数据集存储在内存中以正常工作。 | |
| OrderByDescending() | ||
| ✔️ | Prepend() | 返回一个新集合。 |
| ✔️ | Range() | 与标准range()函数在语义上不同。 |
| ✔️ | Repeat() | |
| Reverse() | 需要一次性获取所有数据。 | |
| ✔️ | Select() | |
| ✔️ | SelectMany() | |
| SequenceEqual() | ||
| ✔️ | Single() | @throws 💣 |
| SingleOrDefault() | ||
| ✔️ | Skip() | |
| ✔️ | SkipWhile() | |
| ✔️ | Sum() | |
| ✔️ | Take() | 返回一个新集合。 |
| ✔️ | TakeWhile() | 返回一个新集合。 |
| ThenBy() | 排序需要一次性获取所有数据。 | |
| ThenByDescending() | 排序需要一次性获取所有数据。 | |
| ✔️ | ToArray() | |
| ToDictionary() | 不适用。 | |
| ToList() | 不适用。 | |
| ToLookup() | 不适用。 | |
| Union() | 需要存储所有先前处理过的数据。 | |
| ✔️ | Where() | |
| ✔️ | Zip() | 返回一个新集合。 |
仅省略了非懒加载(或贪婪)的方法,因为它们不能通过生成器实现正确的懒加载。当然,它们可以作为标准延迟方法实现,但仍然需要一次性获取所有数据。
对于所有输入,键既不导出也不使用。如果你绝对需要访问键,请考虑将它们与数据一起存储。
持久性
此库设计用于长期使用。无论你给它什么,它都应该能够正常工作。
只有少数方法被标记为💣,可能会抛出异常:.NET API需要这些,因此这是不可避免的。除此之外,你只能期望发生标准的语言错误。