Я мало чем могу помочь с Genie, но в Vala это будет:
private static int main (string[] args) {
string[] datas = new string[] {
"cold", "z", "bpples", "pallalala", "apples", "xccv"
};
GLib.qsort_with_data<string> (datas, sizeof(string), (a, b) => GLib.strcmp (a, b));
return 0;
}
По сути, ключом является GLib.qsort_with_data
. Вы также можете использовать Posix.qsort
, как упоминалось в apmasell, но это немного сложнее.
Как упоминалось в apmasell и txasatonga, вы можете использовать тип данных из libgee, но если вы уже не используете libgee, вы можете вместо этого использовать что-то из glib. В этом случае подойдет GLib.GenericArray
. В Вале это будет выглядеть так:
private static int main (string[] args) {
GLib.GenericArray<string> datas = new GLib.GenericArray<string> ();
datas.add ("cold");
datas.add ("z");
datas.add ("pallalala");
datas.add ("apples");
datas.add ("xccv");
datas.sort (GLib.strcmp);
return 0;
}
Одна очень приятная особенность GLib.GenericArray
заключается в том, что он использует массив C в качестве основного хранилища. Если вы используете обычные массивы в других местах своего кода, вы можете получить доступ к базовому массиву, используя GLib.GenericArray.data
и потенциально избежать копирования всего массива. И, конечно же, это также не навязывает зависимость от libgee.
Наконец, ваш выбор имени переменной… «данные» во множественном числе, «данные» в единственном числе. Я упоминаю об этом только потому, что у меня есть повод опубликовать это:
![XKCD 1429](https://i.stack.imgur.com/FOPAK.png)
person
nemequ
schedule
27.10.2014