[英]Is there a more efficient alternative to nesting an if statement within a for loop in C# when dealing with large numbers of iterations?
我有一個方法,該方法由嵌套在for循環中的if語句組成:
for (int i = 0; i < val; i=i+2)
{
for (int j = i+1; j < val; j=j+1)
{
actualDistance = actualDistance + (ulong)Math.Max(revenue[i], revenue[j]) * (ulong)Math.Abs(point[j] - point[i]);
if (j + 1 < val)
{
actualDistance = actualDistance + (ulong)Math.Max(revenue[i+1], revenue[j+1]) * (ulong)Math.Abs(point[j+1] - point[i+1]);
}
}
}
但是,如果val表示數千萬以內的數字,則該方法在運行時會花費很長時間,因為它在for和if循環中都使用。
有沒有更好,更有效的方法? 目前的代碼時間效率太低。
我遺漏了一些東西,或者您的代碼等效於:
for (int j = i+1; j < val; j=j+1)
{
actualDistance = actualDistance + (ulong)Math.Max(revenue[i], revenue[j]) * (ulong)Math.Abs(point[j] - point[i]);
actualDistance = actualDistance + (ulong)Math.Max(revenue[i+1], revenue[j+1]) * (ulong)Math.Abs(point[j+1] - point[i+1]);
}
actualDistance = actualDistance - (ulong)Math.Max(revenue[i+1], revenue[val]) * (ulong)Math.Abs(point[val] - point[i+1])
您的if
語句幾乎總是true,唯一的情況是false,當j == val - 1
,因此您可以始終在if
語句中運行代碼,然后在for
循環之外減去最后一種情況。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.