我正在使用takewhile以这种方式对一系列值进行分类:
var Range_1 = Dictionary_Name.TakeWhile (x=> x.Value < 50).toList();
字典(String,int)包含如下值:
[Item 1, 10]
[Item 2, 20]
[Item 3, 5]
[Item 4, 3]
[Item 5, 41]
,...
我正在使用的代码会生成正确的结果,但是当我将值更改为like:
时 var Range_1 = Dictionary_Name.TakeWhile (x=> x.Value < 10).toList();
它返回一个空的集合。
我想知道它为什么不返回任何东西。
答案 0 :(得分:10)
TakeWhile
会在找到与条件不匹配的第一个元素时停止。所以它看到[Item 1, 10]
,其值不小于10,因此它会停止迭代。
也许您想要Where
(t => t.Value < 10)
,而只会返回小于10的所有值。
答案 1 :(得分:1)
第一个元素的值为10,条件为(x=> x.Value < 10)
,因此必须返回空集。如果您只想过滤值&lt; 10,使用Where
代替TakeWhile
。
答案 2 :(得分:0)
Dictionary<TKey,TValue>
不会以任何特定顺序返回其键/值对。它应该是可重复的,只要在枚举之间不修改字典,但我相信,顺序依赖于每个键的计算哈希值,插入值的顺序以及放置每个项目的哈希桶
如果您想要有序集合,请查看以下System.Collections.Generic
类:
Linq也可以使用它的Join()
方法:
Dictionary<int,string> dictionary = GetSomeDictionary() ;
KeyValuePair<int,string>[] matches = Enumerable.Range(1,50) // outer (left) set
.Join( dictionary , // inner (right) set
x => x , // outer key selector
y => y.Key , // inner key selector
(x,y) => y // result selector
)
.ToArray()
;
或者,正如@zxspectrum指出的那样,使用Where()
代替TakeWhile()
。