2013-08-02 40 views
-1

我有3個值存儲在變量v,pk中。我想找到其中最好的。變量的值是:v = 3,p = 6k = 2確定具有最大值的變量的名稱

結果應該是包含最大值的變量的名稱 - 文本v,pk

我該怎麼做?

+4

這是功課? –

+3

[C#find largest number](http://stackoverflow.com/questions/5117251/c-sharp-find-biggest-number),[列表最大整數值查找列表](http:// stackoverflow。 com/questions/5295112/maximum-integer-value-find-in-listint) – Michelle

+0

僅供參考,此處的社區更好地回答了顯示您嘗試爲自己解決問題的證據的問題。這將使其不太可能被降低和/或關閉。例如,在這裏你可以說你嘗試使用'Math。Max',但它只是返回變量的值,而您想要變量的*名稱*。 –

回答

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

答案應該是vor p或k不是值 – user2272260

+0

@ user2272260:我完全不理解您的評論。 – jason

+0

@ user2272260你是指基於哪個實際變量最大的文本「p」,「v」或「k」? – n8wrl

5
var values = new List<int> { v, p, k }; 
var maxValue = values.Max(); 

更新,重新修改過的問題:變量名不編譯的IL代碼存在。因此您不能輕鬆檢索它們。

但是你可以創建一個字典。把我的頭頂部(我並沒有想這個,但它可能會略有沿着這些路線):

+0

答案應該是v或p或k不是值 – user2272260

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

這是相當笨重,但它的工作原理(kpv勝聯繫,p勝與v的關係)。

+1

這也可能會稍微好一些(因爲它不會創建一個新的列表和枚舉器,它們都需要GC:編輯) – FuleSnabel

2

下面是一些手工maded方法的基礎上,仿製藥和最大距離可枚舉:

public static T MaxVal<T>(params T[] items) 
{ 
    return items == null? default(T) : items.Max(); 
} 

而對於整數,例如,你可以這樣調用:

Console.WriteLine(MaxVal(4, 8, 15, 16, 42)); 
+1

您不需要指定' ' - 類型將從參數中推斷出來。 –

+0

是的,你是對的。舊習難改。修正,澄清,也不是更新問題的答案... – Dmytro

相關問題