可能是问题的标题不够,这是我的问题,我将首先给你一个例子:
原始序列: 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 !!
请有人帮助我吗?
答案 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初始化为最后一个索引。