2011-06-27 80 views
0

可能是問題的標題是不夠的,這裏是我的問題,我會跟給你一個例子開始:拖放序列順序

原序號: 0 Item_105 1. Item_13 2. Item_6 3. Item_14 4. Item_106

修飾的序列: 0. Item_105 1. Item_14 2. Item_13 3. Item_6 4. Item_106

在這裏,我必須有2個指標: 索引1 = 3 索引2 = 1 這意味着舊元素3去到新的位置1

實際上,我用C#語言的工作,當我將項目拖移到把它放在一個新的位置有時它會給我很好的索引,有時候不會! 這就是「for」循環經常拿索引:

for (int i = 0; i < stops.Count - 1; i++) 
{ 
    if (originalOrder[i] != modifiedOrder[i]) 
    { 
     if (originalOrder[i] == modifiedOrder[i + 1] && index2 == -1) 
      index2 = i; 
     else if (modifiedOrder[i] == originalOrder[i + 1] && index2 == -1) 
      index2 = i; 
     if (originalOrder[i] != modifiedOrder[i + 1] && index1 == -1) 
      index1 = i; 
    } 
} 

所以這是我的問題:如何得到正確的索引1和2?我需要在代碼中稍後再做一些工作人員,如果我有正確的索引,其餘的都可以!

請誰能幫助我?

回答

0

對於初學者來說,代碼中的不對稱看起來很可疑。如果不仔細查看當前的代碼,我會認爲在向一個方向拖動項目而不是另一個方向時可能會給出正確的答案。

index1 = -1; 
index2 = stops.Count; // This could be off by one 
for (int i = 0; i < stops.Count - 1; i++) 
{ 
    // First, find the bounds of what was moved 
    if (originalOrder[i] != modifiedOrder[i] && index1 == -1) 
    { 
     index1 = i; 
    } 
    if (index1 != -1 && originalOrder[i] == modifiedOrder[i]) 
    { 
     index2 = i-1; 
     // No need to look at any more items 
     break; 
    } 
} 
// Swap indices depending on which direction item was moved 
if (originalOrder[index1] != modifiedOrder[index2]) 
{ 
    int temp = index1; 
    index1 = index2; 
    index2 = temp; 
} 

我不能告訴你的例子什麼stops.Count代表。您需要確保將索引2初始化爲最後一個索引。