【发布时间】:2018-09-22 23:39:40
【问题描述】:
我有一份订购产品的清单。我还有一个索引值列表。我想提取索引在索引列表中的所有产品。现在我正在这样做:
var indexes = new List<int> { 1, 2, 5, 7, 10 };
var myProducts = orderedProducts.Where((pr, i) => indexes.Any(x => x == i)).ToList();
但是,myProducts 中只有 2 个元素:索引为 1 和 2 的产品。它完全漏掉了 5、7 和 10。这是怎么回事?我该如何解决这个问题?
注意:orderedProducts.Count 总是大于indexes 列表的最大值。
orderedProducts 由以下组成:
orderedProducts = productDictionary[fam.Key]
.ToList()
.OrderBy(g => g.factor)
.ToList();
其中g.factor 是一个int,fam.Key 是产品字典的一个int 键。我检查了 myProducts,它确实是一个按因子升序排序的 List<Product>。
prodDictionary 是 Dictionary<int?, List<Product>>。
【问题讨论】:
-
确定
i是orderedProducts字典中的序数(从零开始)索引,而不是任意数据库键? -
您能告诉我们
orderedProducts的内容和生成的myProducts。你也可以只做indexes.Contains(i),如果性能一直是个问题,你可能想使用HashSet<int>。 -
这不会重现。
myProducts包含所有 5 项,当我将此行添加到示例代码的开头时:var orderedProducts = Enumerable.Range(1, 20);请添加一行代码填充orderedProducts,以便您的代码重现问题,所以我们可以看看发生了什么。 -
另外,在您的实际代码中,您不会碰巧有任何其他
Where调用吗?如果是这样,应该注意索引将来自过滤结果,而不是原始来源。 -
啊,废话。我才意识到我的错误。生成索引的代码不正确。掌心。
标签: c# indexing where ienumerable