2015-04-05 72 views
0

在嘗試查找列表中最大和最小值時的visual basic中,使用math.min/max這樣的效率更高:math.min和math.max vs排序以有效查找列表中的值

Dim highest As Decimal = Decimal.MinValue 
Dim lowest As Decimal = Decimal.MaxValue 

For Each item As Decimal In listNumber 
    highest = Math.Max(highest, item) 
    lowest = Math.Min(lowest, item) 
Next 

或對列表進行排序,並通過指數像這樣搶值:

listNumber.Sort() 
listNumber(0) 
listNumber(99) 

它看起來像使用最小值/最大值是首選的方法,但他們都似乎工作不夠好名單100個十進制值,比另一個更有效率,或者這只是一個6比6的事情?

我試圖找到一種方法來在Visual Studio 2013 Express中進行基準測試,但看起來我必須升級到Visual Studio Ultimate,我錯過了什麼嗎?

+3

_「我試圖找到一種方法,基準本在Visual Studio 2013 Express,但它看起來我必須升級到Visual Studio Ultimate,我錯過了什麼嗎?「_你只需要使用'System.Diagnostics.Stopwatch'和一個有意義的測試。但我可以告訴你,你是微型優化。使用'listNumber.Min()'和'listNumber.Max()'這些最易讀和可維護的代碼。 – 2015-04-05 21:54:08

+0

@TimSchmelter謝謝,這在一般情況下非常有用,但看起來在這種情況下,它們都以1ms運行 – apaul 2015-04-05 22:05:17

+0

@ apaul34208:編譯器可能會爲每種方法生成類似的輸出。您的方法和內置方法之間的任何差異都可以用更大的樣本量來實現。但是,如果可能的話,您應該使用內置方法,因爲它們更適合於這些情況。你不應該嘗試微觀優化,除非你的用例以某種方式證明它的合理性。 – grovesNL 2015-04-05 22:11:30

回答

1

排序項目意味着您不僅會找出哪一個是最大和最小的,您還將根據價值安排所有項目。儘管做起來很簡單,但您還不需要額外的工作來完成計算機。

您可以使用MinMax方法來得到你想要的東西一樣容易排序列表:

Dim highest As Decimal = listNumber.Min() 
Dim lowest As Decimal = listNumber.Max()