2011-02-04 38 views
15

Tôi có danh sách chungCách xóa một mục khỏi danh sách chung

Làm cách nào để xóa một mục?

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

Điều này là hoàn toàn tắt chủ đề, nhưng cũng xem xét xem xét các thuộc tính được tự động triển khai. http://msdn.microsoft.com/en-us/library/bb384054.aspx – inspite

Trả lời

24

Vâng, không có gì để loại bỏ vì danh sách của bạn là trống rỗng (bạn cũng không cung cấp cho nó một định danh, do đó, mã của bạn sẽ không biên dịch) là. Bạn có thể sử dụng Remove(T item) hoặc RemoveAt(int index) để loại bỏ một đối tượng hoặc đối tượng tại một chỉ mục được chỉ định tương ứng (một khi nó thực sự chứa một cái gì đó).

giả tạo mẫu mã:

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

Bạn nên sử dụng '.RemoveAt (0)' để xóa thứ gì đó dựa trên số chỉ mục '.Remove (0)' sẽ không hoạt động. – Pricey

+0

@Pricey: Vâng, cảm ơn. Typo đã được sửa. –

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 

OR để loại bỏ một sinh viên nổi tiếng.

//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

Grateful Đã có danh sách đầy. Số học sinh được lấy từ đầu vào và tôi xóa khỏi danh sách. –

+0

Kiểm tra chỉnh sửa của tôi (trong 2 giây) – DaveShaw

+0

Vui lòng giải thích quy mô hơn! –

1

Vâng, bạn đã không cung cấp cho danh sách tên và một số cú pháp của bạn rất khả thi.

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

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

Hiện có nhiều loại bỏ chức năng trình bày chi tiết ở đây: C# List Remove Methods

+0

Tôi nghĩ bạn đã quên 'void' s. Ngoài ra, trong các tên phương thức C# thường được viết hoa. –

+0

@gaearon - Vâng, vâng ... đây là mục đích trình diễn. –

0

lẽ bạn có thể sử dụng một Dictionary<string, Student> thay vì List<Student>.

Khi bạn thêm Sinh viên, hãy thêm ID hoặc Tên của nó hoặc bất kỳ thứ gì có thể nhận dạng duy nhất nó. Sau đó, bạn có thể chỉ cần gọi myStudents.Remove(myStudentId)

+0

Hãy kiểm tra ví dụ (Number student is Key) –

+0

Tôi nghĩ rằng chúng ta cần suy nghĩ về các hành động sử dụng một từ điển trong kịch bản này - các công trình xây dựng từ điển chậm và chèn, cập nhật và loại bỏ nghĩa là hadh phải được tạo và lưu trữ làm cho nó chậm hơn Danh sách . Nhưng đối với mục đích truy xuất Từ điển có thể hiệu quả hơn vì có một giá trị duy nhất để tìm kiếm trên – stack72

16


Từ nhận xét của bạn Tôi kết luận rằng bạn đọc tên sinh viên từ đầu vào và bạn cần xóa sinh viên với tên đã cho.

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 

Lưu ý rằng điều này sẽ xóa tất cả học sinh có tên đã cho.

Nếu bạn cần phải loại bỏ những sinh viên đầu tiên được tìm thấy bởi tên, lần đầu tiên sử dụng First phương pháp để tìm thấy anh ta, và sau đó gọi Remove cho ví dụ:

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

Nếu bạn muốn đảm bảo chỉ có một sinh viên với tên được đặt trước khi tháo ông, sử dụng Single trong một thời trang tương tự:

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

Lưu ý rằng Single gọi không thành công nếu không có chính xác một mục phù hợp với vị từ.

+0

rất rất tốt. –

+0

cool..worked for me..thanks +1 cho bạn ... :) –

+1

@OP: Chỉ cần nhớ rằng việc xóa một học sinh theo tên sẽ là ngu ngốc trong một ứng dụng thực tế vì StudentName sẽ không phải là duy nhất vì vậy rất có thể là bạn sẽ xóa nhầm Sinh viên. – user1021726

1

int count = queue.Đếm;

 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

giải thích sẽ giúp .. – CCoder

1

Để xóa một hàng hoặc bản ghi từ danh sách chung theo quan điểm của lưới, chỉ cần viết này số-

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

Hãy thử LINQ:

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

tôi đã thực hiện một chương trình có chứa 7 thẻ , sau đó trộn và tôi hy vọng sẽ thực hiện để giúp họ

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 

    } 



} 
Các vấn đề liên quan