在 D 中的关联数组中查找最大值元素



在阅读了有关范围的文档后,我相信任何std.algorithm函数都应该与任何包含关联数组的容器一起使用,

但是下面的代码失败了:

double[double] freqIntensity;
foreach (complexval; resultfft)
{
    freqIntensity[arg(complexval)]++;
}
minPos!("a > b")(freqIntensity);

有错误:

srcmain.d(56): Error: template std.algorithm.minPos does not match any function template declaration. Candidates are:
C:Ddmd2windowsbin....srcphobosstdalgorithm.d(6321):        std.algorithm.minPos(alias pred = "a < b", Range)(Range range) if (isForwardRange!(Range) && !isInfinite!(Range) && is(typeof(binaryFun!(pred)(range.front, range.front))))
srcmain.d(56): Error: template std.algorithm.minPos(alias pred = "a < b", Range)(Range range) if (isForwardRange!(Range) && !isInfinite!(Range) && is(typeof(binaryFun!(pred)(range.front, range.front)))) cannot deduce template function from argument types !("a > b")(double[double])
srcmain.d(56): Error: template instance minPos!("a > b") errors instantiating template

当然,我可以迭代或做其他技巧,但我不想做与C++相同的错误(例如用C++编写C代码),我希望语言功能为我工作。找到关联数组的最大值元素的最佳方法是什么。

使用 byValue 避免复制。 请注意,这在 HEAD 中有效,并将在下一个版本中部署。

import std.stdio, std.algorithm;
void main() {
    double[double] freqIntensity = [1.0 : 2.0, 2.3 : 8.9];
    writeln(minPos!("a > b")(freqIntensity.byValue));   
}

关联数组不是一个范围,你必须传入值

import std.stdio, std.algorithm;
void main() {
    double[double] freqIntensity = [1.0 : 2.0, 2.3 : 8.9];
    writeln(minPos!("a > b")(freqIntensity.values));   
}

最新更新