2011-02-04 14 views
15

一般リストがあります一般リストからアイテムを削除する方法

アイテムを削除するにはどうすればよいですか?

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

これは全く話題にはなりませんが、自動実装されたプロパティの検討も検討してください。 http://msdn.microsoft.com/en-us/library/bb384054.aspx – inspite

答えて

24

まあ、(あなたも、識別子それを与えていないので、あなたのコードがコンパイルされません)あなたのリストが空であるため、削除するものは何もありません。 Remove(T item)またはRemoveAt(int index)を使用して、指定したインデックスのオブジェクトまたはオブジェクトを削除することができます(実際には何かが含まれていれば)。

不自然なコードサンプル:

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

インデックス番号 '.Remove(0)'に基づいて何かを削除するには '.RemoveAt(0)'を使うべきです。 – Pricey

+0

@Pricey:うん、ありがとう。タイプミスが修正されました。 –

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 

または既知の学生を削除します。

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

感謝して 既にリストには記入されていますか? 学生番号は入力から取得され、リストから削除されます。 –

+0

編集をチェックする(2秒後) – DaveShaw

+0

もっとスケールを説明してください! –

1

まあ、あなたのリストに名前をつけておらず、あなたの構文のいくつかは怪しいです。

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

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

がある以上、ここで詳細な機能を削除します。

+0

私はあなたが 'ボイド'を忘れたと思う。また、C#ではメソッド名は通常大文字になります。 –

+0

@gaearon - まあ、はい...これはデモンストレーションの目的でした。 –

0

C# List Remove Methodsはたぶんあなたの代わりにList<Student>Dictionary<string, Student>を使用することができます。

スチューデントを追加するときは、IDまたは名前、またはそれを一意に識別できるものを追加します。あなたは簡単に電話することができますmyStudents.Remove(myStudentId)

+0

例を確認してください(番号学生はキーです) –

+0

このシナリオで辞書を使用する動作について考える必要があると思います。辞書の構成は遅く、挿入、更新、削除は生成して保存する必要があることを意味しますリストよりも遅くなります。しかし、検索目的のために辞書はより効果的であるため、 – stack72

16

ご意見から私は入力から生徒の名前を読んで、特定の名前の学生を削除する必要があると結論づけます。

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 

名前が付けられたすべての生徒が削除されることに注意してください。

あなたが彼を見つけるために、名前で最初に見つかった学生、最初の使用First方法を削除し、インスタンスのRemoveを呼び出す必要がある場合:

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

あなたは確実にしたい場合のみがあります指定された名前を持つ学生の彼を除去する前に、同様の方法でSingleを使用します。

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

なおSingleコール述部に一致する項目が1つも正確にない場合は、が失敗します。

+0

上で検索するユニークな価値があるので、非常に良い。 –

+0

cool..chan.thanks +1あなたのために... :) –

+1

@OP:StudentNameは一意ではないので、実際のアプリケーションでは名前を使ってStudentを削除すると愚かになることを覚えておいてください間違った生徒を削除します。 – user1021726

1

int count = queue。カウント;

 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

説明は助けになるでしょう.. – CCoder

1

ただ、これは

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

を私は7枚のカードが含まれているプログラムを作りましたシャッフルして、彼らを助けるために取ることを望む

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 

    } 



} 
関連する問題