代码之家  ›  专栏  ›  技术社区  ›  Daniel Earwicker

在函数列表操作中,我们称之为“在每个项目之间插入一些东西”是什么?

  •  5
  • Daniel Earwicker  · 技术社区  · 16 年前

    public static IEnumerable<T> Separate<T>(this IEnumerable<T> source, 
                                             Func<T> separator)
    {
        bool first = true;
        foreach (T item in source)
        {
            if (first)
                first = false;
            else
                yield return separator();
    
            yield return item;
        }
    }
    

    例如,这使我能够轻松地用超链接编程填充流程文档,但每个超链接之间都有换行符:

    para.Inlines.AddRange(_recentFiles.Select(f => f.ToHyperlink())
                                      .Separate(() => new LineBreak()));
    

    Separate

    5 回复  |  直到 16 年前
        1
  •  14
  •   Dario    16 年前

    intersperse

    Zip zip [a, b, c] [x, y, z] = [(a, x), (b, y), (c, z)] )

        2
  •  2
  •   Lou Franco    16 年前

        3
  •  1
  •   Henk Holterman    16 年前

    它看起来有点像string.Join(),尽管Join不返回真正的列表。

        4
  •  1
  •   alanlcode    16 年前

    它在Clojure中也被称为intercept。

    user> (interpose "," ["a" "b" "c"])
    ("a" "," "b" "," "c")
    
        5
  •  0
  •   Reto Meier    16 年前

    听起来像是拉上拉链(英式拉链),长边有数据,另一边有分隔符:-)