首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在列表中一个接一个地添加项目的快捷方式?

在列表中一个接一个地添加项目的快捷方式?
EN

Stack Overflow用户
提问于 2012-02-27 17:15:46
回答 3查看 15.2K关注 0票数 8

除了foreach循环和创建新集合之外,是否有其他更快捷的方法来在现有列表中的特定对象之后添加对象?

举个例子:

“艾米”,“曾傑瑞”,“托尼”,“艾米”,“杰克”。我想在每个“艾米”后面简短地加上“西蒙”

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-02-27 17:29:14

您可以使用Linq来完成此操作。

代码语言:javascript
运行
复制
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,但您可以将其放入扩展方法中以保持代码清晰。

可拓方法

您可以很容易地将其放入扩展方法中。

代码语言:javascript
运行
复制
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);
    } 
}

现在调用:

代码语言:javascript
运行
复制
List<String> list = new List<String>() { "amy","jerry","tony","amy","jack" };
list.AddAfterEach(p => p == "amy", "simon");
票数 9
EN

Stack Overflow用户

发布于 2012-02-27 17:17:35

如果您知道要在何处输入项目,则可以执行以下操作

代码语言:javascript
运行
复制
List.Insert(position, item)

请参阅List.Insert() on MSDN

票数 13
EN

Stack Overflow用户

发布于 2012-02-27 17:20:13

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

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9462518

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档