0

我在变量vp和中存储了 3 个值k。我想找到其中最伟大的。变量的值是:v = 3p = 6k = 2

结果应该是包含最大值的变量的名称——文本vpk

我怎样才能做到这一点?

4

4 回答 4

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";

但是你看到它比第一个版本可读性差多少了吗?

于 2013-08-02T18:55:44.680 回答
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";

它相当笨拙,但它有效(kpor取得联系vp与 取得联系v)。

于 2013-08-02T18:58:08.077 回答
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()
于 2013-08-02T18:56:27.623 回答
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));
于 2013-08-02T19:03:05.060 回答