将GLib.Array转换为内置数组

时间:2014-07-10 14:38:11

标签: glib vala

假设我有GLib.Array<Item?>并希望将其转换为Item[],我将如何在Vala中执行此操作?

2 个答案:

答案 0 :(得分:4)

首先,除非您需要与现有代码进行互操作,否则请勿使用GLib.Array。使用GLib.GenericArray,这样更容易正确使用,更难以正确使用。

GLib.Array.data是一个常规数组(在您的情况下为Item?[]),GLib.GenericArray.data也是如此,因此您可以使用它。如果你将它分配给一个拥有的变量,Vala会复制一份。

答案 1 :(得分:1)

一种天真的方法是,使用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属性:在GenericArrayValadoc记录了Array,{{1}}它不是(这并不意味着它不起作用) ,但我还没有尝试过。)