重复值Linq

Adr*_*ero -2 c# linq

假设我有一个数字序列:

 2 5 7 8 0 0 0 
Run Code Online (Sandbox Code Playgroud)

我想要以下顺序:

2 5 7 8 8 8 8
Run Code Online (Sandbox Code Playgroud)

那就是:在零之前重复最后一个数字,这可以用Linq完成吗?

先感谢您

nvo*_*igt 5

一般来说,没有.但你可以写自己的:

public static class SomeExtension
{
    public static IEnumerable<T> ReplaceDefaultByPreviousNonDefault(this IEnumerable<T> sequence)
    {
        T previous = default(T);

        foreach(var val in squence)
        {
            if(val == default(t)) yield return previous;

            previous = val;

            yield return val;        
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

用法示例:

var numbers = new int[] { 2, 5, 7, 8, 0, 0, 0 };

var result = numbers.ReplaceDefaultByPreviousNonDefault();
Run Code Online (Sandbox Code Playgroud)

如果你真的真的坚持人为地介绍一个LinQ方法,你可以采取上面的循环,然后将它构建成一个选择:

  var numbers = new int[] { 2, 5, 7, 8, 0, 0, 0 };

  int last = 0;
  var result = numbers.Select(n => n == 0 ? last : last = n);
Run Code Online (Sandbox Code Playgroud)