2011-05-14 8 views
4

주어진 배열에서 어떤 요소가 가장 자주 발생하는지 알아보기 위해 std.algorithm에서 group 함수를 사용했습니다. 먼저 배열을 정렬하고 (더 이상 필요하지는 않은 것 같습니다) 그룹으로 전달하고 튜플 배열을 정렬하여 첫 번째 요소를 취할 수 있도록합니다. 그것은 작동하지만, 지금은 오류 : 중첩 배열 복사본. Win32 용 2.053 버전을 사용하고 있습니다. 나는 D2와 Phobos가 건설 중임을 알고 정말 놀라지 않습니다. 문제의 원인에 대해 조금 혼란스러워했습니다.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]; 
} 

오류 내가 갖는이 :

[email protected]\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) 

답변

4

이 코드는 올바른 버그 4789. 관련이있는 것으로 보인다합니다. http://d.puremagic.com/issues/show_bug.cgi?id=4789을 참조하십시오.

+0

-release 스위치를 사용하여 컴파일하면 버그 보고서에 나와 있듯이 실제로 문제가 해결됩니다. 감사. – fwend