3

私は5つのアイテムのリストを持っています。

次のような最後のアイテムを抽出したい:

string lastItem = myList.Last();

ただし、この後、myList には 4 つの項目が含まれている必要があります。抽出された最後の項目を除くすべてです。

出来ますか?または、.Take(4) を使用する必要がありますか?

4

5 に答える 5

5

最後に撮りたい場合は、次のようにすることができます。

string lastItem = myList.Last();
myList.Remove(myList.Last());
//myList.Count() will now be 4.
于 2012-08-23T08:29:59.257 に答える
4

フェッチ/削除を行うために任意のインデックスを使用する拡張メソッドを作成できます。

public static T Extract<T>(this List<T> list, int index)
{
    var item = list[index];
    list.RemoveAt(index);
    return item;
}

最後のアイテムは常にを使用して見つけることができるCount - 1ので、呼び出しは単純です:

var item = list.Extract(list.Count - 1);

これは、インデックスによって任意のアイテムを「抽出」できることを意味します。

于 2012-08-23T08:32:30.967 に答える
4

またはメソッドを使用して、リストから要素を削除できList.Removeます。List.RemoveRangeList.RemoveAt

使用するリスト インデクサーを使用してリストへの参照を取得した後、リストの最後の要素を削除するには、次のようにします。

var element = myList[myList.Count - 1];
myList.RemoveAt(myList.Count - 1);

削除するアイテムのインデックスを最初に見つける必要がなく、削除するアイテムに一致する最初のオカレンスを削除するだけであることに注意する必要がないためRemoveAt、代わりに使用するRemoveとより効率的です。Remove最後の要素。

最後に、リストの最後の項目を数回削除するアルゴリズムがある場合は、たとえばQueue.

于 2012-08-23T08:28:23.263 に答える
2

これを行うための拡張メソッドを作成します

public static class Extension
{
  public static string RemoveLast(this IList<string> myList)
  {
     int lastItemIndex = myList.Count - 1;
     string lastItem = myList.Last();
     myList.RemoveAt(lastItemIndex);
     return lastItem; 
  }
}

それを次のように呼びます

string itemRemoved = lst.RemoveLast(); //this will delete the last element from list & return last element as well 
于 2012-08-23T08:33:50.443 に答える
1

リストの代わりにスタックを使用しない方が適切だと思われる理由

[Test]
public void MyTest()
{
    Stack<int> stack = new Stack<int>(new[] { 1, 2, 3, 4, 5 });
    int pop = stack.Pop();
    Assert.AreEqual(stack.Count, 4);
    Assert.AreEqual(pop, 5);
}
于 2012-08-23T08:50:02.050 に答える