2

我应该使用什么 Phobos 算法来检查一个范围内的所有元素是否相等?我看过了std.algorithm,我发现最接近的是equal,但它需要两个范围作为参数。我也找不到申请reduce解决这个问题的方法。

4

2 回答 2

6

很好,亚当。还有几种可能:

foo.empty || foo.equal(repeat(foo.front, foo.length))

或者

foo.empty || repeat(foo.front).startsWith(foo)

或者

foo.findAdjacent!("a != b").empty
于 2013-10-10T10:04:08.413 回答
4

一种选择是使用 canFind:

import std.algorithm;
import std.range;

void main() {
    int[] foo = [1,1,2];
    if(!foo.empty) {
      if(!canFind!"a != b"(foo, foo.front))
           // they are equal
      else
            // not equal
    } else { /* nothing to compare against */ }
}

这里的逻辑是如果它们都相等,那么它应该无法找到不等于第一个项目的项目。

安德烈的答案还有更多选择!

于 2013-10-08T21:31:42.430 回答