Допустим, у меня есть GLib.Array<Item?>
и я хочу преобразовать его в Item[]
, как мне это сделать в Vala?
Преобразование GLib.Array во встроенный массив
Ответы (2)
Во-первых, если вам не нужно взаимодействие с существующим кодом, не используйте GLib.Array
. Используйте GLib.GenericArray
, который гораздо проще использовать правильно и сложнее неправильно.
GLib.Array.data
— это обычный массив (в вашем случае Item?[]
), как и GLib.GenericArray.data
, поэтому вы можете просто использовать его. Если вы назначите его принадлежащей переменной, Vala сделает копию.
Наивным подходом было бы то, что вы берете все элементы из массива с помощью метода 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
нет (это не значит, что не работает, но я не пробовал).