第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

將時間執(zhí)行計算為單獨的類,其中函數(shù)是可變的

將時間執(zhí)行計算為單獨的類,其中函數(shù)是可變的

C#
慕萊塢森 2022-10-23 10:07:05
設(shè)如下二分查找函數(shù):public static bool BinarySearching(int[] array, int searchValue){    Array.Sort(array);    double p = 0;    double q = 0;    int r = array.Length - 1;    while (p <= r)    {        q = Math.Floor((p + r) / 2);        if (array[(int)q] == searchValue)        {            return true;        }        else if (array[(int)q] != searchValue && array[(int)q] > searchValue)        {            r = (int)(q - 1);        }        else if (array[(int)q] != searchValue && array[(int)q] < searchValue)        {            p = (int)(q + 1);        }    }    return false;}}如果我們想測量它的執(zhí)行時間,我們會做類似的事情var watch = System.Diagnostics.Stopwatch.StartNew();BinarySearching(int[] array, int searchValue);watch.Stop();var elapsedMs = watch.ElapsedMilliseconds;但是,通過單獨的函數(shù)進(jìn)行測量是否有更漂亮的方法,使得變量是計算函數(shù)本身?例如,在偽代碼中是public static string ComplexityCounter(bool algorithm(int[] array, int searchValue)){    var watch = System.Diagnostics.Stopwatch.StartNew();    algorithm(int[] array, int searchValue);    watch.Stop();    var elapsedMs = watch.ElapsedMilliseconds;    string result = elapsedMs.ToString();    return result;}而且,確定它在 C# 方面不起作用,你能幫我修改它或提出你自己的嘗試嗎?最有趣的是為所有算法找到這樣的結(jié)構(gòu),而不管它產(chǎn)生的變量類型如何。
查看完整描述

3 回答

?
翻閱古今

TA貢獻(xiàn)1780條經(jīng)驗 獲得超5個贊

我建議您接受一個更通用的操作,您可以將它用于更多功能。然后,您可以使用 lamda 表達(dá)式調(diào)用它。例子:


    private static long MeasureDuration(Action algorithm)

    {

        var watch = System.Diagnostics.Stopwatch.StartNew();


        algorithm.Invoke();


        watch.Stop();


        return watch.ElapsedMilliseconds;

    }

我使用 .Invoke() 進(jìn)行鏈接,這樣更容易理解這是一個被調(diào)用的操作。


并這樣稱呼它:


  bool found;

  var result = MeasureDuration(() => found = BinarySearching(myArray, mySearchValue));


查看完整回答
反對 回復(fù) 2022-10-23
?
江戶川亂折騰

TA貢獻(xiàn)1851條經(jīng)驗 獲得超5個贊

Func<bool>你可以像這樣傳遞一個參數(shù):


public static TimeSpan Measure(Func<int[], int, bool> method, int[] arg1, int arg2)

{

    var stopwatch = new Stopwatch();

    stopwatch.Start();

    var result = method.Invoke(arg1, arg2);

    stopwatch.Stop();

    return stopwatch.Elapsed;

}

然后你可以像這樣調(diào)用它:


var timeTaken = Measure(MethodToMeasure, new [] {1, 2, 3}, 1);


查看完整回答
反對 回復(fù) 2022-10-23
?
慕村9548890

TA貢獻(xiàn)1884條經(jīng)驗 獲得超4個贊

假設(shè)您不想像基于 Action 的答案那樣丟棄算法的結(jié)果,實現(xiàn)它的最通用方法可能是在返回類型中使方法泛型,并將算法的輸入?yún)?shù)綁定到 lambda表達(dá)式,因此具有類型Func<T>. 我假設(shè)您可以使用新的 C# 7 元組語法


private static (T, long) GetResultAndDuration<T>(Func<T> algorithm)

{

   var watch = System.Diagnostics.Stopwatch.StartNew();


   T result = algorithm();


   watch.Stop();


   return (result, watch.ElapsedMilliseconds);

}

你可以這樣稱呼它:


(var result, var duration) = GetResultAndDuration(() => MyCoolAlgorithm(42, "some param"));


查看完整回答
反對 回復(fù) 2022-10-23
  • 3 回答
  • 0 關(guān)注
  • 138 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號