2011-02-04 11 views
15

Tengo una lista genéricaCómo eliminar un artículo de una lista genérica

¿Cómo elimino un artículo?

EX:

Class Student 
{ 
    private number; 
    public Number 
    { 
     get(return number;) 
     set(number = value;) 
    } 

    private name; 
    public Name 
    { 
     get(return name;) 
     set(name = value;) 
    } 

    main() 
    { 
     static List<student> = new list<student>(); 

     list.remove...??? 
    } 
} 
+0

Esto está completamente fuera de tema, pero también considera buscar propiedades implementadas automáticamente. http://msdn.microsoft.com/en-us/library/bb384054.aspx – inspite

Respuesta

24

Bueno, no hay nada para eliminar debido a que su lista está vacía (que también no le dio un identificador, por lo que su código no se compilará). Puede usar Remove(T item) o RemoveAt(int index) para eliminar un objeto o el objeto en un índice especificado respectivamente (una vez que realmente contiene algo).

Contrived ejemplo de código:

void Main(...) 
{ 
    var list = new List<Student>(); 
    Student s = new Student(...); 
    list.Add(s); 

    list.Remove(s); //removes 's' if it is in the list based on the result of the .Equals method 

    list.RemoveAt(0); //removes the item at index 0, use the first example if possible/appropriate 
} 
+0

Debería utilizar '.RemoveAt (0)' para eliminar algo en función del número de índice '.Remove (0)' no funcionaría. – Pricey

+0

@Pricey: Sí, gracias. Typo arreglado. –

3
List<Student> students = new List<Student>(); 
students.Add(new Student {StudentId = 1, StudentName = "Bob",}); 
students.RemoveAt(0); //Removes the 1st element, will crash if there are no entries 

, o eliminar un Student conocido.

//Find a Single Student in the List. 
Student s = students.Where(s => s.StudentId == myStudentId).Single(); 
//Remove that student from the list. 
students.Remove(s); 
+0

Agradecido Ya se ha llenado la lista. Los números de estudiante se toman de la entrada y los quito de la lista. –

+0

Verifique mi edición (hasta en 2 segundos) – DaveShaw

+0

¡Explique más escalas! –

1

Bueno, no le ha dado un nombre a la lista, y parte de su sintaxis es wonky.

void main() 
{ 
    static List<Student> studentList = new List<Student>(); 
} 

// later 
void deleteFromStudents(Student studentToDelete) 
{ 
    studentList.Remove(studentToDelete); 
} 

Hay más quitar funciones detalladas aquí: C# List Remove Methods

+0

Creo que olvidó 'vacíos'. Además, en el método C#, los nombres suelen estar en mayúscula. –

+0

@gaearon - Bueno, sí ... esto fue para fines de demostración. –

0

Tal vez se puede utilizar un Dictionary<string, Student> en lugar de la List<Student>.

Cuando agrega un Estudiante, agregue su ID o Nombre o lo que sea que pueda identificarlo de manera única. Luego, simplemente puede llamar al myStudents.Remove(myStudentId)

+0

Por favor marque el ejemplo (Number student is Key) –

+0

Creo que tenemos que pensar en las acciones de usar un diccionario en este escenario - las construcciones de un diccionario son lentas y la inserción, actualización y eliminación significa que debe generarse y almacenarse un hadh por lo que es más lento que la lista . Pero para fines de recuperación, los diccionarios pueden ser más efectivos ya que hay un valor único para buscar en – stack72

16


De sus comentarios concluyo que usted ha leído el nombre del estudiante de la entrada y necesita eliminar al estudiante con el nombre dado.

class Student { 
    public string Name { get; set; } 
    public int Number { get; set; } 

    public Student (string name, int number) 
    { 
     Name = name; 
     Number = number; 
    } 
} 


var students = new List<Student> { 
    new Student ("Daniel", 10), 
    new Student ("Mike", 20), 
    new Student ("Ashley", 42) 
}; 

var nameToRemove = Console.ReadLine(); 
students.RemoveAll (s => s.Name == nameToRemove); // remove by condition 

Tenga en cuenta que esto eliminará a todos los estudiantes con nombre de pila.

Si necesita quitar el primer estudiante que se encuentre por su nombre, utilice primero First método para encontrarlo, y luego llamar a Remove para la instancia:

var firstMatch = students.First (s => s.Name == nameToRemove); 
students.Remove (firstMatch); 

Si desea asegurarse de que no sólo es uno estudiante con nombre que se da antes de extraer de él, utilizar Single de una manera similar:

var onlyMatch = students.Single (s => s.Name == nameToRemove); 
students.Remove (onlyMatch); 

Tenga en cuenta que Single llamada falla si no hay exactamente un elemento que coincida con el predicado.

+0

muy, muy bueno. –

+0

genial ... trabajado para mí ... gracias +1 para ti ... :) –

+1

@OP: Solo recuerda que eliminar un Estudiante por su nombre sería estúpido en una aplicación del mundo real porque el Nombre del Estudiante no será único, así que es probable eliminarías al estudiante equivocado. – user1021726

1

int count = queue.Contar;

 while(count>0) 
     { 
      HttpQueueItem item = queue[0]; 
      /// If post succeeded.. 
      if (snd.IsNotExceedsAcceptedLeadsPerDayLimit(item.DataSaleID, item.AcceptedLeadsPerDayLimit) && snd.PostRecord(item.DataSaleDetailID, item.PostString, item.duplicateCheckHours, item.Username, item.Password, item.successRegex)) 
      { 
       if (item.WaitTime > 0) 
        Thread.Sleep(item.WaitTime); 
       queue.Remove(item); 
      } 
       ///If Exceeds Accepted leads per day limit by DataSale.. 
      else if (!snd.IsNotExceedsAcceptedLeadsPerDayLimit(item.DataSaleID, item.AcceptedLeadsPerDayLimit)) 
      { 
       queue.RemoveAll(obj => obj.DataSaleID == item.DataSaleID); 
      } 
       /// If Post failed.. 
      else //if (!snd.PostRecord(item.DataSaleDetailID, item.PostString, item.duplicateCheckHours, item.Username, item.Password, item.successRegex)) 
      { 
       queue.Remove(item); 
      } 
      count = queue.Count; 
     } 
+0

explicación ayudaría .. – CCoder

1

Para eliminar una fila o registro de la lista genérica en la vista de cuadrícula, acaba de escribir este código-

List<Address> people = new List<Address>(); 
Address t = new Address(); 
people.RemoveAt(e.RowIndex); 
grdShow.EditIndex = -1; 
grdShow.DataSource = people; 
grdShow.DataBind(); 
0

Try LINQ:

var _resultList = list.Where(a=>a.Name != nameToRemove).Select(a=>a); 
0

hice un programa que contiene 7 cartas , luego mezclar y espero tomar para ayudarlos

class Program 
{ 

    static void Main(string[] args) 
    { 
     Random random = new Random(); 
     var cards = new List<string>(); 
     //CARDS VECRTOR 
     String[] listas = new String[] { "Card 1", "Card 2", "Card 3", "Card 4", "Card 5", "Card 6", "Card 7"}; 


     for (int i = 0; i<= cards.Count; i++) 
     { 

      int number = random.Next(0, 7); //Random number 0--->7 


      for (int j = 0; j <=6; j++) 
      { 
       if (cards.Contains(listas[number])) // NO REPEAT SHUFFLE 
       { 

        number = random.Next(0, 7); //AGAIN RANDOM 

       } 
       else 
       { 
        cards.Add(listas[number]); //ADD CARD 
       } 
      } 

     } 

     Console.WriteLine(" LIST CARDS"); 

     foreach (var card in cards) 
     { 
      Console.Write(card + " ,"); 


     } 

     Console.WriteLine("Total Cards: "+cards.Count); 

     //REMOVE 

     for (int k = 0; k <=6; k++) 
     { 
      // salmons.RemoveAt(k); 
      Console.WriteLine("I take the card: "+cards.ElementAt(k)); 
      cards.RemoveAt(k); //REMOVE CARD 
      cards.Insert(k,"Card Taken"); //REPLACE INDEX 
      foreach (var card in cards) 
      { 
       Console.Write(card + " " + "\n"); 

      } 


     } 


     Console.Read(); //just pause 

    } 



} 
Cuestiones relacionadas