2013-04-10 26 views
4

我想从关联数组中移除(y)元素并对其进行处理。 目前我使用的是RedBlackTree以及.removeAny(),但我不需要按任何顺序输入数据。 I 可能在AA上使用.byKey(),但是它总是会生成一个包含所有密钥的数组。我一次只需要一个,在处理其他元素时可能会改变AA。如果没有(内部)遍历整个数据结构,是否有其他聪明的方法可以准确地获得一个密钥?删除关联数组中的任何元素

+0

是不是byKey懒? – dav1d 2013-04-10 20:13:35

+0

我不这么认为。如果http://github.com/D-Programming-Language/druntime/blob/master/src/rt/aaA.d#L519是Keke在内部实现的方式,那么没有。 – 2013-04-10 20:16:39

+0

有趣的是,新机管局实施的时间(它在工作中,但似乎已经死了?) – dav1d 2013-04-10 20:17:51

回答

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似乎是足够快,但。不知道该解决方案实际上是否更快。