代码之家  ›  专栏  ›  技术社区  ›  Judah Gabriel Himango

小艇坏了吗?

  •  27
  • Judah Gabriel Himango  · 技术社区  · 16 年前

    我有点惊讶地发现以下代码的结果,我只想从int序列中删除所有3:

    var sequence = new [] { 1, 1, 2, 3 };
    var result = sequence.SkipWhile(i => i == 3); // Oh noes! Returns { 1, 1, 2, 3 }
    

    为什么不跳过3?

    我的下一个想法是,好吧,Except操作符将执行以下操作:

    var sequence = new [] { 1, 1, 2, 3 };
    var result = sequence.Except(i => i == 3); // Oh noes! Returns { 1, 2 }
    

    • 除了删除3,而且
    • 滑雪者不会跳过最后一个 元素,即使它与 条件。Grr公司。

    5 回复  |  直到 16 年前
        1
  •  62
  •   Ahmad Mageed    16 年前

    它没有坏。 SkipWhile IEnumerable<T> . 一旦不满足这个条件,它将很乐意接受其余的元素。以后与之匹配的其他元素将不会被跳过。

    int[] sequence = { 3, 3, 1, 1, 2, 3 };
    var result = sequence.SkipWhile(i => i == 3); 
    // Result: 1, 1, 2, 3
    
        2
  •  20
  •   erikkallen    16 年前
    var result = sequence.Where(i => i != 3);
    
        3
  •  3
  •   ligaoren    15 年前

    SkipWhile和TakeWhile运算符在谓词函数传递(返回True)时跳过或返回序列中的元素。没有传递谓词函数的rst元素结束求值过程。

    //只要指定的条件为真,就绕过序列中的元素并返回其余元素。

        4
  •  2
  •   Gabe Timothy Khouri    16 年前

    var result = from i in sequence where i != 3 select i;
    
        5
  •  2
  •   Jeffrey Ferreiras    10 年前

    您可能会发现一个有用的解决方案是使用List“FindAll”函数。

    List <int> aggregator = new List<int> { 1, 2, 3, 3, 3, 4 };
    List<int> result = aggregator.FindAll(b => b != 3);