我在变量v
,p
和k
中存储了3个值。我想找到其中最伟大的。变量的值为:v = 3
,p = 6
和k = 2
。
结果应该是包含最大值的变量的名称 - 文本v
,p
或k
。
我该怎么做?
答案 0 :(得分:18)
嗯,你刚刚在第一次没有明确说明你想要的内容时,已经完成了所有已经发布的答案。您可以轻松扩展Enumerable.Max
的使用,为您提供您现在想要的内容:
string max =
new[] {
Tuple.Create(v, "v"),
Tuple.Create(p, "p"),
Tuple.Create(k, "k")
}.Max()
.Item2;
另一种选择是:
string max = v >= p && v >= k ? "v" : p >= v && p >= k ? "p" : "k";
但是你看到它比第一个版本的可读性差得多吗?
答案 1 :(得分:7)
其他答案非常好,但为了完整起见,我想指出,为简单起见,您还可以使用Math.Max
:
var max = Math.Max(Math.Max(v, p), k);
更新根据您的更新问题,我建议您:
var max = v > p ? v > k ? "V" : p > k ? "P" : "K" : p > k ? "P" : "K";
它相当笨拙,但它有效(k
赢得与p
或v
的联系,p
赢得与v
的联系。
答案 2 :(得分:5)
var values = new List<int> { v, p, k };
var maxValue = values.Max();
更新,修改您的修改后的问题:编译的IL代码中不存在变量名称。因此,您无法轻松检索它们。
但你可以创建一本字典。在我的头顶(我实际上并没有尝试这个,但它可能有点沿着这些线):
var dict = new Dictionary<string, int> {
{ "V", 3 }, { "P", 6 }, { "K", 2 }
};
var max = dict.Values.Max();
var relevantKey = dict
.Where(x => max.Equals(x.Value))
.Select(x => x.Key)
.FirstOrDefault()
答案 3 :(得分:2)
这是一些基于泛型的手工方法和来自Enumerable的Max:
public static T MaxVal<T>(params T[] items)
{
return items == null? default(T) : items.Max();
}
例如,对于整数,你可以这样称呼:
Console.WriteLine(MaxVal(4, 8, 15, 16, 42));