d2:重叠数组副本

时间:2011-05-14 23:36:18

标签: d

为了找出给定数组中最常出现的元素,我一直在使用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)

1 个答案:

答案 0 :(得分:4)

这看起来与Bug 4789有关。您的代码是正确的。请参阅http://d.puremagic.com/issues/show_bug.cgi?id=4789