gpt4 book ai didi

c# - 计算时间执行作为单独的类,其中函数是可变的

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:37:44 25 4
gpt4 key购买 nike

设如下二分查找函数:

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

如果我们想测量它的执行时间,我们会做类似的事情

var watch = System.Diagnostics.Stopwatch.StartNew();
BinarySearching(int[] array, int searchValue);
watch.Stop();
var elapsedMs = watch.ElapsedMilliseconds;

但是通过单独的函数来衡量是否有更漂亮的方法,这样变量就是计算函数本身?例如,在伪代码中是

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# 方面不起作用,你能帮我修改它或提出你自己的尝试吗?最有趣的是为所有算法找到这样的结构,而不管它产生的变量类型如何。

最佳答案

我建议你接受一个更通用的 Action ,你可以用它来实现更多的功能。然后您可以使用 lamda 表达式调用它。示例:

    private static long MeasureDuration(Action algorithm)
{
var watch = System.Diagnostics.Stopwatch.StartNew();

algorithm.Invoke();

watch.Stop();

return watch.ElapsedMilliseconds;
}

我使用 .Invoke() 链接,这让我们更容易理解这是一个被调用的 Action 。

并这样调用它:

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

关于c# - 计算时间执行作为单独的类,其中函数是可变的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55124488/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com