在列表中逐项添加项目的快捷方式? [英] Short way to add item after item in List?

查看:43
本文介绍了在列表中逐项添加项目的快捷方式?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

除了foreach循环和新集合创建之外,是否还有其他方法可以在现有List中的特定对象之后添加对象?

If there any short way besides foreach loop and new collection creation to add object after specific object in existing List ?

只是一个例子:

"amy","jerry","tony","amy","jack".我想以简短的方式在每个"amy"之后添加"simon"

"amy","jerry","tony","amy","jack". I want to add "simon" after each "amy" in short way

推荐答案

您可以使用Linq来做到这一点.

You can use Linq to do this.

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,但您可以将其放入扩展方法中以保持代码清晰.

Uses a foreach but you can put it into a extension method to keep the code clear.

您可以轻松地将其放入扩展方法中.

You can easily put this into a extension method.

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");

这篇关于在列表中逐项添加项目的快捷方式?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆