2012-02-26 40 views
4

在數學所以這裏不強是我的問題:更新進度與適當的值

我用一個進度條來顯示在後臺執行工作的進展情況:

片段我的代碼:

  int i = 0; 
      int totalFriends = 0; 

      foreach (dynamic friend in facebookFriends) 
      { 
       totalFriends++; 
      } 

      foreach (dynamic friend in facebookFriends) 
      { 
       i++; 

       var friend = new FacebookFriend 
       { 
        FbId = friend["uid"].ToString() 
       }; 

       AccountFacebookFriendRepository.SaveOrUpdate(accountFriend); 
      } 

現在應用程序的功能遠不止於此,我在這裏只執行一小部分工作: 因此,例如在進入本節之前,進度欄的值爲7,執行完工作後必須達到20我想要你PDATE它同時做適當的值從7到20的工作:

我對這個問題的看法是如下:

var intiProgressbarValue = 7; 
var finalProgressbarvalue = 20; 

foreach (dynamic friend in facebookFriends) 
{ 
    i++; 
    var friend = new FacebookFriend 
        { 
         FbId = friend["uid"].ToString() 
        }; 
    AccountFacebookFriendRepository.SaveOrUpdate(accountFriend); 
    var calculatedValue = CalculatedValue(initProgressbarValue, finalProgressBarValue,totalFriends, i); 
    UpdateProgressBar(calculatedValue); 
} 
//note that totalFriends can be any number lets say from 0 to 5000 
private int CalculatedValue(int initVal, int finalVal, int totalFriends, int currentFriend) 
{ 
    int progressBarVal = 0; 
    //** 
     Perform logic so it will return a progress value that is bigger that 7 and smaller that 20 depending on the number of friends and currently updated friend 
    **// 
    progressBarVal = 8;//this would be the result of calculation, a value from 8 to 20 
    return progressBarVal; 
} 

任何幫助,不勝感激:

+0

這ISN」與答案相關 - 你確定你正在使用動態c orrectly? – Jason 2012-02-26 02:18:31

+0

是的動態工作正常,我有我需要的所有值 – 2012-02-26 02:20:37

回答

3

試試這個:

private int CalculatedValue(int initVal, int finalVal, int totalFriends, int currentFriend) 
{ 
    initVal++; 
    var diff = finalVal - initVal; // 20-8 = 12 
    return (diff*(currentFriend+1))/totalFriends + initVal; 
} 

這假定currentFriend從0變爲totalFriends-1(含)。例如,如果currentFriend = 99totalFriends = 300,此函數返回的答案是12,三分之一通過8..20(含)的範圍。

+0

根據原始問題,這給出了一個錯誤的錯誤,因爲currentFriend從1開始,而不是從0開始。另外,如果'currentFriend'從0開始爲你建議,第一個值_應該是'initVal',但是這個函數返回'initVal + 1'。 – 2012-02-26 02:26:08

+0

@AdamLiss現在的朋友從1開始並不清楚。我認爲範圍與C#數組中的索引相同,我在答案中提到了它。我還在回答OP的代碼中的評論時加了1個答案:「這將是計算的結果,其值爲8到20」。 – dasblinkenlight 2012-02-26 02:29:11

+0

第一個片段將'i'設置爲0,然後將其遞增到'foreach'循環的頂部。這意味着在第一次調用'CalculatedValue'時,'i'是1。 – 2012-02-26 02:31:27

3

您可以用公式

progressBarVal = initVal + (finalVal - initVal) * (currentFriend/totalFriends); 

要檢查數學,計算progressBarValcurrentFriend是0:

initVal + (finalVal - initVal) * 0 = initVal 

currentFriendtotalFriends

initVal + (finalVal - initVal) * 1 = finalVal