web-dev-qa-db-ja.com

ジェネリックリストからアイテムを削除する方法

一般的なリストがあります

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

例:

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...???
    }
}
15
mah_85

リストが空なので、削除するものはありません(識別子も指定しなかったため、コードはコンパイルされません)。 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
}
24
Ed S.


コメントから、入力から学生名を読んだため、指定された名前の学生を削除する必要があると思います。

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);

彼を削除する前に、与えられた名前のone学生のみが存在することを確認したい場合は、Singleを同様の方法で使用します。

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

述語に一致するアイテムが1つだけではない場合は、Single call failsに注意してください。

17
Dan Abramov
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);
3
DaveShaw

グリッドビューの汎用リストから行またはレコードを削除するには、次のコードを記述します。

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

int count = queue.Count;

        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;
        }
1
user1737636

まあ、リストに名前を付けなかったので、構文のいくつかは不安定です。

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

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

ここに詳細な削除関数があります: C#リストの削除メソッド

1
Andrew Arnold

私は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

    }



}

Linqを試してください:

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

_Dictionary<string, Student>_の代わりに_List<Student>_を使用できます。

生徒を追加するときに、そのIDまたは名前、または生徒を一意に識別できるものを追加します。その後、単にmyStudents.Remove(myStudentId)を呼び出すことができます

0
Steve B