Hatena::ブログ(Diary)

あんこひのにっき

2011-08-04

D言語でオブジェクト配列をうまい具合にソートする

std.algorithmのsort!の使い方を学んだのでメモメモ

例えば

class Enemy{
    int HP;
}

みたいなクラスがあったとしてこれをHP順にソートするには

Enemy[] enemys;

...

sort!((Enemy e1, Enemy e2){ return e1.HP > e2.HP; })(enemys);

とすれば体力が大きい順にソートされます。
返り値はrangeで来るみたいですが、元配列が変更されるようなのでremove!とは動きが違うっぽいです。

haru-sharu-s 2011/08/04 23:33 import std.algorithm;
import std.stdio;

class Enemy
{
int HP;
}

void main()
{
Enemy[] enemies = [new Enemy, new Enemy, new Enemy];
enemies[0].HP = 2;
enemies[1].HP = 1;
enemies[2].HP = 3;
//sort!((Enemy e1, Enemy e2){ return e1.HP > e2.HP; })(enemies);
//sort!((e1, e2){ return e1.HP > e2.HP; })(enemies);
sort!"a.HP > b.HP"(enemies);
foreach (e; enemies)
writeln(e.HP);
}

全部同じになります.

androcoffeeandrocoffee 2011/08/05 14:32 なるほど文字列で渡すときはそうすればよかったんですね。
ありがとうございます。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/androcoffee/20110804/1312440187