如果在foreach循环和新集合创建之间有任何简短的方法在现有List中的特定对象之后添加对象吗?
只是一个例子:
“艾美”, “杰里”, “贝”, “艾米”, “插口”。 我希望在每个“amy”之后简短地添加“simon”
答案 0 :(得分:11)
答案 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。