6

アイテムのリストがあります。たとえば、100個のアイテムです。条件に一致する既存の要素の前に別の要素を追加する必要があります。これを行うために最適化された最速の方法と最もパフォーマンスは何ですか?すなわち:

foreach (var i in myList)
{
    if (myList[i].value == "myValue")
    {
        myList[i-1] add ("someOtherValue")
    }
}

多分私は他のコンテナを使うべきですか?

4

5 に答える 5

14

FindIndexまず、メソッドを使用してアイテムのインデックスを見つけることができます:

var index = myList.FindIndex(x => x.value == "myvalue");

次にInsert、適切なポイントで:

myList.Insert(index,newItem);

特定のインデックスに挿入すると、他のすべてが前方にプッシュされることに注意してください (インデックス 0 で項目を検索することを考えてください)。

于 2012-11-19T16:49:55.997 に答える
4

の使用を検討してくださいLinkedList<T>。アイテムを挿入または削除するためにアイテムをシフトする必要がないという利点があります。欠点は、アイテムにランダムにアクセスできないことです。アイテムにアクセスするには、最初または最後のアイテムからリストをトラバースする必要があります。

于 2012-11-19T17:05:55.973 に答える
3
int index = myList.IndexOf("myValue");
if (index >= 0)
  myList.Insert(index, "myNewValue");

ちなみに、for-eachで反復している間は、独自のコレクションまたはリストを変更しないでください(上記のコードのように)。

于 2012-11-19T17:30:23.060 に答える
3
myList.Insert(myList.IndexOf("myValue") - 1, "someOtherValue");

おそらく、最初に myvalue が存在し、インデックス 0 にないことを確認する必要があります。

于 2012-11-19T16:48:38.870 に答える
1

リストは配列であると思います-その場合、Linqでこれを試しましたか?

string[] mylist = new string[100];
// init the list
List<string> list = keys.ToList();
list.Insert(1,"somethingelse");
mylist = list.ToArray(); // convert back to array if required

そもそもの場合はList、変換をスキップしてInsert直接使用できます。

于 2012-11-19T16:48:49.150 に答える