如何连接两个数组?
How to concatenate two arrays?
[indent=4]
init
x: array of int = {1, 2, 3}
y: array of int = {4, 5, 6}
z: array of int = x + y
以上代码产生此错误消息:
concat_arrays.gs:6.23-6.27: error: Incompatible operand
z: array of int = x + y
Vala 翻译效果并不好:
int main () {
int[] x = {1, 2, 3};
int[] y = {4, 5, 6};
int[] z = x + y;
return 0;
}
错误信息是:
concat_arrays_v.vala:4.15-4.19: error: Incompatible operand
int[] z = x + y;
正确的做法是什么?
使用GLib.Array<T>
:
int main () {
int[] x = {1, 2, 3};
int[] y = {4, 5, 6};
Array<int> a = new Array<int> (false, true, 0);
a.append_vals (x, x.length);
a.append_vals (y, y.length);
// taking over ownership avoids array copying
int[] z = (owned) a.data;
foreach (var i in z) {
stdout.printf ("%d ", i);
}
stdout.printf ("\n");
return 0;
}
精灵版本:
[indent=4]
init
x: array of int = {1, 2, 3}
y: array of int = {4, 5, 6}
var a = new Array of int (false, true, 0)
a.append_vals (x, x.length)
a.append_vals (y, y.length)
z: array of int = (owned) a.data
更新:在之后,我修改了上面的代码以使用(owned)
,这避免了不必要的数组复制操作。
new Array<T>
仍然会增加一些分配对象的开销,但在大多数情况下应该没有问题。
使用 Memory.copy
很危险,因为它会导致各种内存问题。
[indent=4]
init
x: array of int = {1, 2, 3}
y: array of int = {4, 5, 6}
z: array of int = x + y
以上代码产生此错误消息:
concat_arrays.gs:6.23-6.27: error: Incompatible operand
z: array of int = x + y
Vala 翻译效果并不好:
int main () {
int[] x = {1, 2, 3};
int[] y = {4, 5, 6};
int[] z = x + y;
return 0;
}
错误信息是:
concat_arrays_v.vala:4.15-4.19: error: Incompatible operand
int[] z = x + y;
正确的做法是什么?
使用GLib.Array<T>
:
int main () {
int[] x = {1, 2, 3};
int[] y = {4, 5, 6};
Array<int> a = new Array<int> (false, true, 0);
a.append_vals (x, x.length);
a.append_vals (y, y.length);
// taking over ownership avoids array copying
int[] z = (owned) a.data;
foreach (var i in z) {
stdout.printf ("%d ", i);
}
stdout.printf ("\n");
return 0;
}
精灵版本:
[indent=4]
init
x: array of int = {1, 2, 3}
y: array of int = {4, 5, 6}
var a = new Array of int (false, true, 0)
a.append_vals (x, x.length)
a.append_vals (y, y.length)
z: array of int = (owned) a.data
更新:在(owned)
,这避免了不必要的数组复制操作。
new Array<T>
仍然会增加一些分配对象的开销,但在大多数情况下应该没有问题。
使用 Memory.copy
很危险,因为它会导致各种内存问题。