【问题标题】:Determine the name of a variable with the maximum value [duplicate]确定具有最大值的变量的名称[重复]
【发布时间】:2013-08-02 18:54:51
【问题描述】:

我有 3 个值存储在变量 vpk 中。我想找到其中最伟大的。变量的值为:v = 3p = 6k = 2

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

我该怎么做?

【问题讨论】:

  • 仅供您参考,这里的社区对显示您尝试自己解决问题的证据的问题做出了更好的回应。这将使其不太可能被否决和/或关闭。例如,在这里您可以说您尝试使用 Math.Max,但它只返回变量的值,而您想要变量的 name

标签: c# .net max


【解决方案1】:

好吧,您只是在第一次时没有明确说明您想要什么,从而避免了已经发布的所有答案。您可以扩展 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";

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

【讨论】:

  • 答案应该是 vor p 或 k 而不是值
  • @user2272260:我完全不明白你的评论。
  • @user2272260 你的意思是文本“p”、“v”还是“k”基于哪个实际变量最大?
  • @Jason 我认为他想要像if(v is max) 这样的逻辑。如果有重复的最高值,甚至可能没有最大值。
  • @user2272260:请看我的编辑。下一次,第一次问正确的问题。请注意,您的问题标题表示“值”,而您的问题正文表示您想要“找到最伟大的”(原文如此),而不是您想要找到保持最大值的变量的 name
【解决方案2】:

其他答案都很好,但为了完整起见,我想指出,为简单起见,您也可以使用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 赢得与 pv 的联系,p 赢得与 v 的联系)。

【讨论】:

  • 这也可能会表现得更好(因为它不会创建所有都需要被 GC:ed 的新列表和枚举器)
【解决方案3】:
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()

【讨论】:

  • 答案应该是 v 或 p 或 k 而不是值
【解决方案4】:

这是一些基于泛型和来自 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));

【讨论】:

  • 你不需要指定&lt;int&gt;--类型会从参数中推断出来。
  • 是的,你是对的。旧习难改。已修复,为澄清起见,它也不是更新问题的答案...
猜你喜欢
  • 2017-08-17
  • 1970-01-01
  • 1970-01-01
  • 2019-06-09
  • 2021-05-23
  • 2015-06-20
  • 1970-01-01
  • 1970-01-01
  • 2021-06-28
相关资源
最近更新 更多