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需要这些,因此这是不可避免的。除此之外,你只能期望发生标准的语言错误。