拖放序列顺序

时间:2011-06-27 10:09:11

标签: c# arrays indexing

可能是问题的标题不够,这是我的问题,我将首先给你一个例子:

原始序列: 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个索引: Index1 = 3 Index2 = 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?我需要稍后在代码中做一些工作人员,如果我有正确的索引,其余的都是OK !!

请有人帮助我吗?

1 个答案:

答案 0 :(得分: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初始化为最后一个索引。