2013-04-10 2 views
4

Я хотел бы удалить элемент (y) из ассоциативного массива и обработать его. В настоящее время я использую RedBlackTree вместе с .removeAny(), но мне не нужны данные, чтобы быть в любом порядке. I мог использовать .byKey() на AA, но всегда создает массив со всеми ключами. Мне нужен только один за раз и, вероятно, изменит АА при обработке каждого другого элемента. Есть ли другой умный способ получить ровно один ключ без (внутри), проходящего через всю структуру данных?Удаление любого элемента из ассоциативного массива

+0

Не является ли Клей ленивым? – dav1d

+0

Я так не думаю. Если http://github.com/D-Programming-Language/druntime/blob/master/src/rt/aaA.d#L519 - это то, как byKeys реализовано внутри, то нет. –

+0

Интересно, время для новой реализации АА (это было в работах, но похоже, что они мертвы?) – dav1d

ответ

2

Существует обходной путь, который работает так же, как с помощью .byKeys():

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, кажется, достаточно быстро, хотя. Не уверен, что обходной путь на самом деле быстрее.

Смежные вопросы