我很难搞清楚如何移动数组元素.例如,给出以下内容:
var arr = [ 'a', 'b', 'c', 'd', 'e'];
Run Code Online (Sandbox Code Playgroud)
我怎么能写一个'd'以前移动的函数'b'?
还是'a'之后'c'?
移动后,应更新其余元素的索引.这意味着在第一个例子中,移动arr [0]将='a',arr [1] ='d'arr [2] ='b',arr [3] ='c',arr [4] = 'E'
这看起来应该很简单,但我无法绕过它.
我似乎无法通过阅读MSDN上的ObservableCollection.Move(int oldIndex,int newIndex)的文档来解决这个问题:
oldIndex类型:System.Int32从零开始的索引,指定要移动的项的位置.newIndex类型:System.Int32从零开始的索引,指定项的新位置.
我不明白它是如何工作的.该项目会发生什么变化newIndex?我的假设是每个项目的索引index >= newIndex递减.这个假设是否正确?更重要的是,在MSDN上某处解释或描述了这种行为?
我需要在IEnumerable <>中移动一个项目,即将一个项目移到另一个上面.最简单的方法是什么?
这里有一个类似的问题,但我没有通用列表只有一个IEnumerable <>:Generic List - 在列表中移动一个项目
我有一个项目列表和一个“选定”列表(完整列表的子集)。我想实现一个将子列表项移动到完整列表底部的函数。
例如,如果我从列表 0,1,2,3,4,5,6,7,8,9 中选择了元素 2,4, & 6,我希望这个函数的最终结果是 0,1, 3,5,7,8,9,2,4,6
目前,我正在尝试使用这样的东西,但我不确定如何定义moveTo:
public object MoveLoopToBottom()
{
if (selectedLoops.Count < 1)
return null;
foreach (ProfilerLoop selected in selectedLoops)
{
int moveFrom = ClonedLoops.IndexOf(selected);
int moveTo = ;
ClonedLoops.Move(moveFrom, moveTo);
}
return null;
}
Run Code Online (Sandbox Code Playgroud)
我咨询了它的List.Move工作原理:通用列表 - 在列表中移动一个项目,但它似乎不能“移动到列表末尾”。List.Move可以(最多)移动到“倒数第二个”位置(试图移动到列表的末尾会抛出“OutOfRange Exception”)。
而不是List.Move,我尝试执行List.Removethen List.Add(或List.Addthen List.RemoveAt),但是调用List.Remove给我的 foreach 循环迭代带来了问题(哪里List.Move没有)。
有什么建议?
我有以下列表:
List<string> l=new List<string()>{"a","b","c","d","1","2","3","4","a1","b2","c3","d4"};
Run Code Online (Sandbox Code Playgroud)
我有oldIndex,size而且newIndex.
我们先来说说上面的列表中oldIndex = 4,size = 4,newIndex = 0.
我想要的输出列表是:
{"1","2","3","4","a","b","c","d","a1","b2","c3","d4"};
Run Code Online (Sandbox Code Playgroud)
我发现的解决方案是(对所有情况都不起作用):
for(int i=0;i<size;i++)
{
if(oldIndex<newIndex)
{
var x=l[oldIndex];
l.RemoveAt(oldIndex);
l.Insert(newIndex+size-1,x);
}
else
{
var x=l[oldIndex+i];
l.RemoveAt(oldIndex+i);
l.Insert(newIndex+i,x);
}
}
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法,可能使用LINQ或更好的东西,或者上面是唯一的方法吗?
我从这个链接找到了上面的答案.这个问题的不同之处在于我想移动一个块,而不仅仅是单个元素.