sanmai/lazy-linq

此包已被弃用且不再维护。未建议替代包。

支持强制懒加载的.NET LINQ库

v0.6 2020-01-31 03:26 UTC

README

Build Status Coverage Status Infection MSI Codacy Badge Maintainability

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