【发布时间】:2013-10-08 21:15:28
【问题描述】:
我应该使用什么 Phobos 算法来检查一个范围内的所有元素是否相等?我查看了std.algorithm,发现最接近的是equal,但它需要两个范围作为参数。我也找不到申请reduce 来解决这个问题的方法。
【问题讨论】:
标签: algorithm range d equality
我应该使用什么 Phobos 算法来检查一个范围内的所有元素是否相等?我查看了std.algorithm,发现最接近的是equal,但它需要两个范围作为参数。我也找不到申请reduce 来解决这个问题的方法。
【问题讨论】:
标签: algorithm range d equality
很好,亚当。更多可能性:
foo.empty || foo.equal(repeat(foo.front, foo.length))
或
foo.empty || repeat(foo.front).startsWith(foo)
或
foo.findAdjacent!("a != b").empty
【讨论】:
mismatch(foo, foo)[0].empty、uniq(foo).walkLength() == 1、group(foo).walkLength() == 1(uniq 假定已排序,但无论如何它都可以在这里工作)
equal 进行比较时也是如此。从技术上讲,空范围内的每个元素都等于其他所有元素(当然,从技术上讲,每个元素也不等于每个元素)。但我会选择true。
一种选择是使用 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 */ }
}
这里的逻辑是,如果它们都相等,那么它应该不能够找到不等于第一个项目的项目。
Andrei 的回答还有几个选择!
【讨论】: