【问题标题】:Binary Search in D 2.0 (Phobos)?D 2.0(Phobos)中的二进制搜索?
【发布时间】:2011-01-07 03:54:39
【问题描述】:

只有我一个人,还是Phobos没有二分查找功能?我有一个预排序数组,我想用我自己的比较器函数进行搜索,但在 std.algorithms 或 std.containers 中找不到任何内容。

谢谢!

【问题讨论】:

    标签: binary-search d phobos


    【解决方案1】:

    使用来自std.rangeSortedRange

    抄自http://www.digitalmars.com/d/2.0/phobos/std_range.html#SortedRange:

    auto a = [ 1, 2, 3, 42, 52, 64 ];
    auto r = assumeSorted(a);
    assert(r.canFind(3));
    assert(!r.canFind(32));
    

    【讨论】:

    • 啊,你必须使用“assumeSorted”...没想到,谢谢! :)
    • find()(因此canFind())实际上非常聪明,它根据给定的输入类型使用不同的算法。为了使二分搜索起作用,必须对数据进行排序,所以assumeSorted() 使它成为这样,然后find()canFind() 足够聪明,知道二分搜索是最好的搜索,并且他们就是这样做的。
    • 如果您只是尝试进行二分搜索,这根本不直观。
    • 来晚了,累了,但我怀疑设计不错,我的意思是,将强类型引入排序的概念,并将“你想做的事情”分开似乎很酷从“如何完成”。 D 只需要像这样的一整套问题和答案,以便人们可以通过 Google 快速了解这些内容。
    猜你喜欢
    • 2017-08-10
    • 2015-05-18
    • 1970-01-01
    • 2014-07-10
    • 2014-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多