2017-09-18 9 views
0

によって削除:C#のLinkedList <>指定されたインデックス

LinkedList<int> myList; 

をどのように私はindex nにある要素を削除しますか?私は、この特定のリストが重複した値を持つことができるので、何の方法も見つけられないようであり、価値によって取り除かれたものだけが良いものではありません。

EG:

myList.removeAt(n); 
+17

これは基本的に、LinkedListを使用しないでください。リストを代わりに使用してください。 –

+0

@ HansPassantは理解しましたが、このリストでは、私が望むようにアイテムを動かすことができる必要があります。 –

+3

@RandRandomいつも学習している - LinkedListのデータ構造は、配列の裏にあるデータ構造よりもランダムにシャッフルした方がパフォーマンスが良いと考えられていた。 –

答えて

0
あなたはへの既存の参照を持つノードを追加または削除する場合

リンクされたリストは、スピードに大きな利点を持っている、しかし、あなたは参照を持っていないとき、あなたができる最善であります索引にリストを移動し、ノードをつかんでから削除します。

このプロセスを実行する拡張メソッドがあります。後で別のリストに挿入するか、リスト内でその位置を移動したい場合に備えて、削除されたノードへの参照を返します。

public static class ExtensionMethods 
{ 
    public static LinkedListNode<T> RemoveAt<T>(this LinkedList<T> list, int index) 
    { 
     LinkedListNode<T> currentNode = list.First; 
     for (int i = 0; i <= index && currentNode != null; i++) 
     { 
      if (i != index) 
      { 
       currentNode = currentNode.Next; 
       continue; 
      } 

      list.Remove(currentNode); 
      return currentNode; 
     } 

     throw new IndexOutOfRangeException(); 
    } 
} 
関連する問題