web-dev-qa-db-ja.com

リストに最後に追加された要素を削除する方法は?

私はリストフィールドを追加しているC#のリストを持っています。これが私のサンプルコードです。

    List<> rows = new List<>();
    foreach (User user in users)
    {
        try
        {
            Row row = new Row();
            row.cell = new string[11];
            row.cell[1] = user."";
            row.cell[0] = user."";
            row.cell[2] = user."";         

            rows.Add(row);

            if (row.cell[0].Equals("Something"))
            {

                //here i have to write code to remove last row from the list
                //row means all the last three fields

            }

        }

だから私の質問は、C#のリストから最後の行を削除する方法です。私を助けてください。

31
Pranav

この質問に対する直接的な答えは次のとおりです。

if(rows.Any()) //prevent IndexOutOfRangeException for empty list
{
    rows.RemoveAt(rows.Count - 1);
}

しかし...この質問の特定のケースでは、そもそも行を追加しない方が理にかなっています。

Row row = new Row();
//...      

if (!row.cell[0].Equals("Something"))
{
    rows.Add(row);
}

TBH、さらにテストして_"Something"に対してuser.""、および条件が満たされない限りRowをインスタンス化することさえしませんが、user.""はコンパイルされません。読者のための演習として残しておきます。

33
spender

これを行う最も効率的な方法は、 RemoveAt を使用することだと思います:

rows.RemoveAt(rows.Count - 1)
82
Patrick Hofman
rows.RemoveAt(rows.Count - 1);
12
Pradip Daunde

List<T>.RemoveAtメソッドを使用できます:

rows.RemoveAt(rows.Count -1);
7
Selman Genç

より頻繁に行う必要がある場合は、最後の要素をポップする独自のメソッドを作成することもできます。このようなもの:

public void pop(List<string> myList) {
    myList.RemoveAt(myList.Count - 1);
}

またはvoidの代わりに、次のような値を返すこともできます。

public string pop (List<string> myList) {
    // first assign the  last value to a seperate string 
    string extractedString = myList(myList.Count - 1);
    // then remove it from list
    myList.RemoveAt(myList.Count - 1);
    // then return the value 
    return extractedString;
}

2番目のメソッドの戻り値の型がvoidではないことに注意してください。これはstring b/cであり、この関数が文字列を返すようにします...

1
a_m_dev