我试图在有序字典中找到第一个更大或相等的键(而不是限制)并返回其值。
public string foo(int limit, Dictionary<int, string> dir)
{
int index = dir.Keys.FirstOrDefault(x => x >= limit);
return index == 0 ? dir[dir.Keys.Max()] : dir[index];
}
这很有效。但它很丑陋地说:D
您是否知道如何以巧妙,简单和漂亮的方式制作它?也许是神奇的东西?操作员什么都不符合条件?但是怎么样? :d
答案 0 :(得分:4)
虽然值的类型可以为空,但您可以使用:
return dir.FirstOrDefault(x => x.Key >= limit).Value ??
dir.LastOrDefault().Value;
由于KeyValuePair<int, string>
是struct(值类型)且string
可以为空,因此默认值将返回0
的键,其值为null
。
P.S: 由于您的方法参数,我建议您的词典是普通KeyValuePair
词典。
答案 1 :(得分:0)
假设,正如你所说,字典是有序的,那么整个事情可以简化为:
var first = dir.Where(p => p.Key >= limit)
.Select(p => p.Value).FirstOrDefault() ?? dir.Last().Value
虽然不保证字典的顺序。
答案 2 :(得分:0)
return dir.Keys.Any(k => k >= limit) ? dir.First(x => x.Key >= limit).Value
: dir[dir.Keys.Max()];