我有一个项目列表,可以说100个项目。我需要在匹配我的条件的现有元素之前添加另一个元素。这样做的最快方式和最佳性能是什么? 即:
foreach (var i in myList)
{
if (myList[i].value == "myValue")
{
myList[i-1] add ("someOtherValue")
}
}
也许我应该使用其他容器?
答案 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
。