Преобразование GLib.Array во встроенный массив

Допустим, у меня есть GLib.Array<Item?> и я хочу преобразовать его в Item[], как мне это сделать в Vala?


person Marius    schedule 10.07.2014    source источник


Ответы (2)


Во-первых, если вам не нужно взаимодействие с существующим кодом, не используйте GLib.Array. Используйте GLib.GenericArray, который гораздо проще использовать правильно и сложнее неправильно.

GLib.Array.data — это обычный массив (в вашем случае Item?[]), как и GLib.GenericArray.data, поэтому вы можете просто использовать его. Если вы назначите его принадлежащей переменной, Vala сделает копию.

person nemequ    schedule 10.07.2014

Наивным подходом было бы то, что вы берете все элементы из массива с помощью метода index() и добавляете их в пустой массив Item[], используя +=.

Простой пример программы:

public int main (string[] args) {
    Array<string> array = new Array<string> ();
    array.append_val ("1. entry");
    array.append_val ("2. entry");

    string[] builtin = {};

    for (var i = 0; i < array.length; i++) {
        builtin += array.index (i);
    }

    return 0;
}

обновление: GLib.GenericArray действительно кажется лучшим решением. Что касается атрибута data: в GenericArray он задокументирован в Valadoc. , на Array нет (это не значит, что не работает, но я не пробовал).

person meskobalazs    schedule 10.07.2014
comment
GLib.Array.data довольно новый (в настоящее время доступен только в разрабатываемой версии, которая станет 0.26), но он работает. - person nemequ; 12.07.2014