- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在研究将可枚举序列转换为字典类型数据结构的 Enumerable.ToLookup API。可以在此处找到更多详细信息:
https://msdn.microsoft.com/en-us/library/system.linq.enumerable.tolookup(v=vs.110).aspx
它与 ToDictionary 的唯一区别API是这样一个事实,如果键选择器导致重复键,它不会给出任何错误。我需要比较这两个 API 的延迟执行语义。据我所知,ToDictionary API 会导致立即执行序列,即它不遵循 LINQ 查询的延迟执行语义。谁能帮我解决 ToLookup API 的延迟执行行为?它与ToDictionary API 相同还是有一些区别?
最佳答案
很容易测试...
void Main()
{
var lookup = Inf().ToLookup(i => i / 100);
Console.WriteLine("if you see this, ToLookup is deferred"); //never happens
}
IEnumerable<int> Inf()
{
unchecked
{
for(var i=0;;i++)
{
yield return i;
}
}
}
回顾一下,ToLookup
贪婪地 在不延迟的情况下消耗源序列。
相比之下,GroupBy
运算符是 延迟的,因此您可以编写以下内容而不会产生不良影响:
var groups = Inf().GroupBy(i => i / 100); //oops
但是,GroupBy
是贪心,因此当您枚举时,会消耗整个源序列。
这意味着
groups.SelectMany(g=>g).First();
也无法完成。
当您考虑分组问题时,很快就会明白,当将一个序列分成一组序列时,如果不完全消耗整个序列,就不可能知道即使只有一个组是否完整。
关于c# - ToLookup 是否强制立即执行序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38928613/
鉴于此: [ ("A","A122"); ("A","A123"); ("B","B122"); ("B","B123"); ("C","C122"); ] 是
我正在研究将可枚举序列转换为字典类型数据结构的 Enumerable.ToLookup API。可以在此处找到更多详细信息: https://msdn.microsoft.com/en-us/libr
LINQ 提供的 .ToLookup 函数有没有办法要求多个键? 我承认这乍一看似乎不直观,我预计没有实际的方法可以做到这一点,但我希望有人知道方法。 我基本上希望能够通过两个值进行查找,例如 str
考虑到下面的 C# 控制台应用程序代码,使用 我应该如何修改它以替换行: foreach (Product product in productsByCategory[category]) 通过代码行
我有一个如下所示的列表: var products = new List { new Product { Id = 1, Category = "Electronics", Value = 1
var tmpProjection = myCollection.ToLookup(t => t.SomeBoolValue); var listOneFinal = tmpProjection[tr
我正在尝试转 IEnumerable>进入 ILookup使用以下代码: var list = new List>() { new KeyValuePair("London", null),
我有一个巨大的点数据类型列表和一个相等大小的双列表。大小可能在 1000000 左右。两个列表都来自不同的类。 List XYPair; E.g. { (10,10),(10,10).......(
.ToLookup 返回 ILookup . ILookup还实现了接口(interface) IEnumerable> . .GroupBy 返回 IEnumerable> . ILookup 具有
LINQ ToDictionary 和 ToLookup 有什么区别?他们似乎在做同样的事情。 最佳答案 字典是一个 1:1 映射(每个键映射到一个值),并且字典是事后可变(可编辑)的。 查找是一个
我有一个每小时运行一次的 PowerShell 脚本,它基本上通过滴灌过程更新产品信息。该脚本在开发环境中失败,但在生产和质量中继续工作。故障点在使用 LINQ 的线路上。这是脚本: $product
我有以下产品列表 public sealed class Product { public int Id { get; set; } public string Category {
我是一名优秀的程序员,十分优秀!