d2: перекрывающаяся копия массива - PullRequest
4 голосов
/ 15 мая 2011

Чтобы выяснить, какой элемент чаще всего встречается в данном массиве, я использовал групповую функцию из std.algorithm.Сначала я отсортировал массив (который больше не нужен), затем передал его в группу и отсортировал массив кортежей, чтобы я мог взять первый элемент.Раньше это работало, но теперь я получаю ошибку: перекрывающийся массив.Я использую версию 2.053 для win32.Я знаю, что D2 и Фобос находятся в стадии разработки, поэтому я не очень удивлен.Просто немного озадачен тем, что вызывает проблему.

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 Ответ

4 голосов
/ 15 мая 2011

Это похоже на ошибку 4789. Ваш код правильный. См http://d.puremagic.com/issues/show_bug.cgi?id=4789.

...