Back to page

− Links

 Print 

SampleCodes​/Phobos​/range​/1 :: D言語友の会

wiki:SampleCodes/Phobos/range/1

sort等のアルゴリズムには、delegateを利用することが可能です。
元々はsortアルゴリズムのテンプレート引数がaliasパラメタで、リテラルをパラメータにとることが可能であることに由来します。
グローバル名やローカル名なども利用可能なので、関数名を渡すことも、もちろん可能です。

参考: http://www.kmonos.net/alang/d/2.0/template.html#TemplateAliasParameter[1] 参考: http://www.kmonos.net/alang/d/2.0/phobos/std_algorithm.html#sort[2]

これを応用することで、たとえば、3次元のワールド座標上の物体をカメラの座標からの距離で並べ替える「Zソート」などに利用可能かもしれません。

main.d
Everything is expanded.Everything is shortened.
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
 
 
 
 
-
|
|
-
|
!
-
|
!
|
!
import std.stdio;
import std.algorithm: sort;
 
void main()
{
    int[] ary = [0,3,1,2];
    real x = 1.2;
    // xの値(1.2)に近い順に並び変える
    // 1(0.2), 2(0.8), 0(1.2), 3(1.8)の順
    sort!((int a, int b)
    {
        return (a-x)*(a-x)<(b-x)*(b-x);
    })(ary);
    writeln(ary);
}
1
2
$ dmd -run main
1 2 0 3

投票とコメント anchor.png[3] Edit [4]

Choices Vote
大変参考になった0  
参考になった0  
あまり参考にならなかった0  
まったく参考にならなかった0  

No comment. コメント​/SampleCodes​/Phobos​/range​/1Edit[5]

Name:

Last-modified: 2009-07-22 (Wed) 00:28:38 (JST) (4570d) by SHOO