在特定元素之前添加元素到列表

时间:2012-11-19 16:43:41

标签: c# list

我有一个项目列表,可以说100个项目。我需要在匹配我的条件的现有元素之前添加另一个元素。这样做的最快方式和最佳性能是什么? 即:

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

也许我应该使用其他容器?

5 个答案:

答案 0 :(得分:12)

首先,您可以使用FindIndex method找到商品的索引:

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

然后Insert在正确的位置:

myList.Insert(index,newItem);

请注意,在给定索引处插入会推送其他所有内容(考虑在索引0处查找项目)。

答案 1 :(得分:3)

myList.Insert(myList.IndexOf("myValue") - 1, "someOtherValue");

您应该检查以确保myvalue首先存在,并且它不在索引0中。

答案 2 :(得分:3)

考虑使用LinkedList<T>。它的优点是插入或移除物品不需要移动任何物品。缺点是无法随机访问项目。您必须从第一个或最后一个项目开始遍历列表才能访问这些项目。

答案 3 :(得分:2)

int index = myList.IndexOf("myValue");
if (index >= 0)
  myList.Insert(index, "myNewValue");

顺便说一下,在使用for-each进行迭代时,不应修改自己的集合或列表(如上面的代码所示)。

答案 4 :(得分: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