从关联数组中删除任何元素

4
我想从一个关联数组中移除一个元素并处理它。 目前,我正在使用 RedBlackTree 以及 .removeAny(),但我不需要数据按任何顺序排列。我可以在关联数组上使用.byKey(),但这总是产生一个包含所有键的数组。我每次只需要一个键,并且可能会在处理其他元素时更改关联数组。有没有其他聪明的方法可以精确地获取一个键而不必(内部)遍历整个数据结构?

我不这么认为。如果http://github.com/D-Programming-Language/druntime/blob/master/src/rt/aaA.d#L519是byKeys在内部实现的方式,那么不行。 - Sebastian Graf
有趣,是时候实现一个新的AA(之前已经在进行中了,但似乎已经死了?) - dav1d
1个回答

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 看起来已经足够快了。不确定这个解决方法是否实际上更快。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接