为了找出给定数组中最常出现的元素,我一直在使用std.algorithm中的group函数。首先,我将对数组进行排序(似乎不再需要),然后将其传递给组,并对元组数组进行排序,以便我可以获取第一个元素。它曾经工作,但现在我得到错误:重叠数组副本。我正在使用版本2.053 for win32。我知道D2和Phobos正在建设中,所以我并不感到惊讶。对于导致问题的原因感到有些困惑。
import std.stdio, std.algorithm, std.array;
void main() {
int[] arr = [ 1, 2, 2, 2, 2, 3, 4, 4, 4, 5 ];
auto a = sort!("a[1] > b[1]")(array(group(arr)))[0];
}
我得到的错误:
object.Exception@src\rt\arraycat.d(40): overlapping array copy
----------------
42EB58
42E9CF
4061F8
4060A0
406166
405EE8
402072
408898
4088D7
4084D3
4532C9
----------------
阵列的内容有很大的不同。以下代码编译并打印正确的结果:
import std.stdio, std.algorithm, std.array;
void main() {
int[] arr = [ 1, 2, 3, 4, 4, 4, 5 ];
auto a = sort!("a[1] > b[1]")(array(group(arr)))[0];
writeln(a);
}
// prints: Tuple!(int,uint)(4, 3)