假设我有一个List<KeyValuePair<string, string>>
对象,其中以下条目代表狗的名字以及他们出生的不同品种标记:
Name BreedMarkers
Spot PUG
Spot PITBULL
Spot BASSETT
Rover DACHSHUND
Meat PUG
Meat ROTTWEILER
我想只抓取共享公共BreedMarkers
的字符串对。例如,由于Spot
和Meat
共有PUG
的标记,我想削减字典,以便删除除这些对之外的任何内容。最终结果应该是:
Name (Key) BreedMarkers (Value)
Spot PUG
Meat PUG
到目前为止,我已经尝试将元素输出到单独的List<string>
个对象,然后在它们之间尝试join
,但这是code smelly,我希望有更优雅的方式。
答案 0 :(得分:2)
ToLookup
会创建一个新的ILookup
(类似于IDictionary
,但每个键有多个值),其中值变为键,反之亦然:
myNewDict = myOldList.ToLookup(x => x.Value, x => x.Key);
var results = myNewDict["PUG"]; // Spot, Meat
或者只是:
var results = myOldList.Where(x => x.Value == "PUG").Select(x => x.Key);
如果您计划对多个值进行查找,ToLookup
会更好;否则,Where
是好的。