¿Cómo se crearía un método que tomara un número entero i
, y moviera el miembro de List<T>
desde su posición actual al inicio de la lista al i
?Mover un miembro de una lista al frente de la lista
Respuesta
La clase List<T> no ofrece un procedimiento de este tipo, pero se puede escribir un método de extensión que recibe el artículo, lo elimina y finalmente re-inserciones que:
static class ListExtensions
{
static void MoveItemAtIndexToFront<T>(this List<T> list, int index)
{
T item = list[index];
list.RemoveAt(index);
list.Insert(0, item);
}
}
var l = new List<DataItem>();
var temp = l[index];
l.RemoveAt(index);
l.Insert(0, temp);
probar este
static List<int> idList = new List<int>() { 1, 2, 4, 5, 6, 8, 9 };
private static void moveListItem(int index)
{
int getIndex = 0;
foreach (int item in idList)
{
Console.WriteLine(" Before Id List Value - {0} ,Index - {1} ", item.ToString(), getIndex);
getIndex++;
}
int value = idList[index];
idList.RemoveAt(index);
idList.Insert(0, value);
Console.WriteLine();
getIndex = 0;
foreach (int item in idList)
{
Console.WriteLine(" After Id List Value - {0} ,Index - {1} ", item.ToString(), getIndex);
getIndex++;
}
}
Cualquiera de las 3 respuestas hasta ahora funciona, pero en lugar de hacer una operación Eliminar y Insertar, sugiero mover cada elemento un lugar a la derecha desde las posiciones deseadas, al comienzo de la lista. De esa forma evitará mover los artículos colocados a la derecha del artículo movido.
Esta es una modificación de la respuesta de @dtb.
static class ListExtensions
{
static void MoveItemAtIndexToFront<T>(this List<T> list, int index)
{
T item = list[index];
for (int i = index; i > 0; i--)
list[i] = list[i - 1];
list[0] = item;
}
}
Para un método de extensión, esto tendría más sentido ya que es más rápido en promedio que el método de dtb. – Groo
@Groo ¿Es siempre más rápido, incluso para listas más grandes? – Coops
@CodeBlend: sí, para mayor lista la diferencia sería más pronunciada, aunque no puedo afirmar que notará una y diferencia en la práctica. Teóricamente, este método y dtb son ambos 'O (n)', pero en la respuesta de dtb 'list.RemoveAt' primero eliminará el elemento y luego copiará todos los elementos siguientes un lugar hacia atrás, y luego' list.Insert (0, item) 'volverá a insertar el ítem en el índice' 0' y luego copiará todos los ítems hacia delante en 1 posición. El método de Fede, por otro lado, solo hace un barrido hacia atrás (número de intercambios iguales a 'índice'). – Groo
A riesgo de leña del árbol caído:
No sería una LinkedList ser más adecuado para esto? Aunque perdería la funcionalidad de acceso aleatorio, insertar elementos al principio de la lista sería mucho más simple (.AddFirst) y mucho más eficiente.
- 1. ¿Mover un elemento dentro de una lista?
- 2. lista Mover elemento al final de STL
- 3. ¿Qué es una lista frente a una lista de arreglos?
- 4. jQuery mover elemento de la lista al final de la lista
- 5. Utilidad de la lista <T> .Sort() frente a la lista <T> .OrderBy() para un miembro de una clase de contenedor personalizado
- 6. Lista de adyacencia frente al modelo de conjunto anidado
- 7. ¿Cómo ordenar una lista de objetos por un miembro específico?
- 8. Crear lista con sólo un miembro de la clase
- 9. ¿Cómo mover un elemento en una lista en Haskell?
- 10. duplicar cada miembro en una lista - python
- 11. Lista frente a IEnumerable frente a IQueryable al definir la propiedad de navegación
- 12. Problemas al eliminar elementos de una lista al iterar a través de la lista
- 13. Mover elementos entre carpetas en una lista de SharePoint 2010
- 14. representación de gráficos: lista de adyacencia frente a la matriz
- 15. Creación de una lista <> Miembro con Spring Roo
- 16. Llamada al constructor base de la plantilla en la lista de inicialización del miembro error
- 17. Looping a través de una lista de una clave específica al final de la lista
- 18. Obtenga una lista de valores distintos en la Lista
- 19. Funciones de miembro no miembro frente a miembro en Python
- 20. C# obtener una lista de un campo de una lista
- 21. objeto por su miembro dentro de una lista en Python
- 22. Uso de la memoria, ordenadaLista frente al problema de la lista
- 23. mapa de filtro frente a la lista de comprensión
- 24. ¿Por qué el "para ... en" funciona de manera diferente en una lista de valores frente a una lista de diccionarios?
- 25. Mover el elemento al principio de la lista desordenada usando jQuery
- 26. una lista> una lista de listas
- 27. ¿Cómo agregar el contenido de una lista al final de la otra lista?
- 28. Usando LINQ al grupo una lista de objetos en una nueva lista agrupada de lista de objetos
- 29. jQuery anexar al final de la lista
- 30. ¿pueden usarse las funciones miembro para inicializar las variables miembro en una lista de inicialización?
Está intentando ordenarlo, ¿verdad? – vittore
¿Tendría que ordenarlo para hacer eso? Solo quiero mover el miembro ONE al índice i, al principio de la lista. No es necesario que mueva el resto. – Shonna
Le habría dado un voto positivo, pero no seleccionó la respuesta obvia. Lo sentimos :(. –