2013-04-10 5 views
4

연관 배열에서 (y) 요소를 제거하고 처리하고 싶습니다. 지금 .removeAny()과 함께 RedBlackTree을 사용하고 있지만 데이터 순서가 필요하지는 않습니다. I 은 AA에서 .byKey()을 사용할 수 있지만 항상 모든 키가있는 배열을 생성합니다. 한 번에 하나씩 만 필요하며 다른 모든 요소를 ​​처리하는 동안 AA를 변경합니다. 전체 데이터 구조를 (내부적으로) 트래버스하지 않고 정확히 하나의 키를 얻는 다른 똑똑한 방법이 있습니까? 내 요구를 들어연관 배열에서 요소 제거

auto anyKey(K, V)(inout ref V[K] aa) 
{ 
    foreach (K k, ref inout(V) v; aa) 
     return k; 
    assert(0, "Associative array hasn't any keys."); 
} 

.byKeys().front 그래도 충분히 빠른 것 같다 :

+0

byKey가 게으르지 않습니까? – dav1d

+0

나는 그렇게 생각하지 않는다. http://github.com/D-Programming-Language/druntime/blob/master/src/rt/aaA.d#L519가 byKeys가 내부적으로 구현되는 방식이면 no입니다. –

+0

흥미로운 새로운 AA 구현을위한 시간 (그것은 작동했지만 죽은 것 같습니다.) – dav1d

답변

2

.byKeys()를 사용하여뿐만 아니라 작동하는 해결 방법은 있습니다. 대안이 실제로 더 빠를 지 확실하지 않습니다.