0

我试图弄清楚如何在下面的代码段中使用 lambda 编写正确的 TakeWhile 语法,这样我就可以让这个过滤工作并返回过滤后的字典。这里有人可以帮忙吗?提前致谢..

List<KeyValuePair<int, int>> myList = myHashList.ToList();
myList.Sort( (x,y) => x.Value.CompareTo(y.Value) );
var temp = myList.TakeWhile(x => x.Value >= keyToFind);
Dictionary<int, int> outDict = temp.ToDictionary(y => y.Key, y => y.Value);

我还要在这里提一下,myHashList 是一个字典 (int,int),具有 n 个整数值和整数键。好的,这里我使用的 lambda myList.TakeWhile(x => x.Value >= KeyToFind) 只执行一次。也就是说,x 在运行时只保存第一条记录,比较只进行一次,temp 有 0 条记录,尽管在第 2 行之后,myList 有 n 条记录。但是在运行时,当 lambda 比较完成时,myList 不在上下文中。但是同样,当执行返回到第 4 行时,myList 又回到了上下文中,但 temp 始终有 0 条记录。TakeWhile 不工作。我需要更正 lambda 吗?

4

1 回答 1

0

好的,我自己在这里添加答案。事实上,这是一件愚蠢的事情。lambda 应该是 (x => keyToFind >= x.Value) 而不是相反,因为我的列表总是从按升序排序的值 0 开始,因此永远不会 >= keyToFind (这又应该是 ValueToFind的 keyToFind,因为我打算找到 Value 而不是 Key),所以再次感谢!

于 2013-01-31T08:35:45.820 回答