在List中添加项目的简短方法?

时间:2012-02-27 09:15:46

标签: c# .net

如果在foreach循环和新集合创建之间有任何简短的方法在现有List中的特定对象之后添加对象吗?

只是一个例子:

“艾美”, “杰里”, “贝”, “艾米”, “插口”。 我希望在每个“amy”之后简短地添加“simon”

3 个答案:

答案 0 :(得分:11)

如果您知道要输入项目的位置,可以执行

List.Insert(position, item)

请参阅List.Insert() on MSDN

答案 1 :(得分:6)

您可以使用Linq执行此操作。

foreach (var item in values
          .Select((o, i) => new { Value = o, Index = i })
          .Where(p => p.Value == "amy")
          .OrderByDescending(p => p.Index))
{
    if (item.Index + 1 == values.Count) values.Add("simon");
    else values.Insert(item.Index + 1, "simon");
} 

使用foreach但您可以将其放入扩展方法以保持代码清晰。

扩展方法

您可以轻松地将其添加到扩展方法中。

public static void AddAfterEach<T>(this List<T> list, Func<T, Boolean> condition, T objectToAdd) 
{
    foreach (var item in list.Select((o, i) => new { Value = o, Index = i }).Where(p => condition(p.Value)).OrderByDescending(p => p.Index))
    {
        if (item.Index + 1 == list.Count) list.Add(objectToAdd);
        else list.Insert(item.Index + 1, objectToAdd);
    } 
}

现在来电:

List<String> list = new List<String>() { "amy","jerry","tony","amy","jack" };
list.AddAfterEach(p => p == "amy", "simon");

答案 2 :(得分:5)

您必须使用List中的Insert(int index, T item)将元素添加到指定索引处的List中。如果index等于Count,则将item添加到List的末尾。此方法是O(n)操作,其中n是Count。