跳到主要内容
版本:release

容器类型(array, map)

array表示数组,顺序存储一系列数值,map表示一种映射关系,他们的存储内存也都是动态分配的。

array

array 数组和 buffer 有点类似,都是可以顺序存储数据类型的数据。 但 buffer 和 array有以下区别:buffer 仅支持 0 ~ 255 的 int 数据作为成员数据, 而 array 不仅可以放 int, float 这些基本数据类型, 还可以存放 string,array,map,buffer等等任意 mixed 数据类型。

array类型基本语法如下:

array array_name = [ value1, value2, value3, ... ];    // value可以为任意不同类型的数值

array初始化,以及一些简单的符号运算:

array arr = [ 1, 2, nil, "Three", 2, [ "hello", (buffer)1, 3.14 ] ]; // 初始化arr
array arr1 = [1, 2], arr2 = [3, 4];
array add_arr = arr1 + arr2; // add_arr = [1, 2, 3, 4]
add_arr << ["hello"]; // add_arr = [1, 2, 3, 4, "hello"]
write(add_arr[0]); // 输出 1

array特殊语法

  • array_instance[&ltn] 获取数组倒数第n个元素

  • array_instance[m..n] 获取第m个元素到第n个元素构成的子数组

  • array_instance[m..&ltn] 获取第m个元素到倒数n个元素构成的子数组

  • array_instance[&ltm..&ltn] 获取倒数第m个元素到倒数n个元素构成的子数组

样例:

array test_arr = [1,2,3,4,5];       // 初始化arr
write(test_arr[<1], "\n"); // 输出 5
write(test_arr[<2], "\n"); // 输出 4
write(test_arr[1..<2], "\n"); // 输出 [2,3,4]
write(test_arr[1..2], "\n"); // 输出 [2,3]
write(test_arr[<3..<1], "\n"); // 输出 [3,4,5]

array常用的外部函数

下面列出array类型一些常用的外部函数以及用法。

1.
array array.allocate(int size, mixed val = nil)
分配空间
+
2.
array array_instance.clean_up()
清除空值
+
3.
void array_instance.clear()
清除空间
+
4.
int array_instance.delete(mixed val)
删除一个值
+
5.
void array_instance.delete_at(int pos, int num = 1)
删除n个值
+
6.
int array_instance.find(mixed val)
查找,失败-1
+
7.
mixed array_instance.get(int pos)
取值
+
8.
array array_instance.get_range(int pos, int count = -1)
取子array
+
9.
void array_instance.insert(int pos, mixed val)
插入
+
10.
void array_instance.insert_n(int pos, array val)
插入数组
+
11.
int array_instance.lower_bound(mixed val)
小于val的元素个数
+
12.
int array_instance.upper_bound(mixed val)
大等于val的元素个数
+
13.
mixed array_instance.get(int pos)
取值
+
14.
void array_instance.push_back(mixed val)
往后插入
+
15.
void array_instance.push_back_n(array val)
往后插入数组
+
16.
void array_instance.set(int pos, mixed val)
赋值
+
17.
void array.copy(array dst, int pos, array src, int start = 0, int copy_len = 2^63 - 1)
复制
+
18.
string array_instance.implode(string delim = "")
array转字符串
+
19.
array array_instance.sort(int order = SortType.ASCENDING)
排序
+
20.
array array_instance.sort(function func, int order = ASCENDING)
函数排序
+
21.
bool is_array(mixed val)
是否为array
+
22.
array array.map(array arr, function func)
array映射
+
23.
array array.range(int start, int end)
范围数组
+
24.
array array_instance.to_string()
array转string
+
25.
array array_instance.filter(function fun)
筛选新array
+
26.
mixed array_instance.select_first(function fun)
筛选第一个满足条件的value
+
27.
mixed array_instance.reduce_left(function fun)
从左压缩数组
+
28.
mixed array_instance.reduce_right(function fun)
从右压缩数组
+

map

map可以理解为一种类似于函数的映射(key -> value),其中key和value都可以是任意mixed类型的数值。

map类型基本语法如下:

map map_name = { key1:value1, key2:value2, key3:value3, ... };    // key和value可以为任意不同类型的数值

map初始化,以及一些简单的符号运算:

map m = {1:2, nil:"Three", "arr":[1, 2]}; // 初始化m
map m1 = {1:2, 3:5}, m2 = {3:4};
map add_map = m1 + m2; // add_map = {1:2, 3:4}, 覆盖m1中相同的key
write(add_map[1]); // 输出 2

map常用的外部函数

下面列出map类型一些常用的外部函数以及用法

1.
mixed map.add_values(map m1, map m2)
values相加
+
2.
map map.allocate(int size)
分配空间
+
3.
map map_instance.clean_up()
删除无用值
+
4.
void map_instance.clear()
清除map
+
5.
int map_instance.delete(mixed key)
删除key对应值(成功true)
+
6.
int map_instance.delete_value(mixed val)
删除value对应值
+
7.
mixed map_instance.get(mixed key)
取key对应value
+
8.
array map_instance.keys()
取出所有key
+
9.
void map_instance.set(mixed key, mixed val)
设置key-value
+
10.
array map_instance.values()
取出所有value
+
11.
bool is_mapping(mixed val)
是否为map
+
12.
bool map_instance.contains_key(mixed key)
是否包含key
+
13.
string map_instance.to_string()
map转string
+
14.
string map_instance.map(function func)
map生成新map
+
15.
mixed map_instance.select_first_key(function func)
找第一个满足条件的value
+
16.
mixed map_instance.select_first_value(function func)
找第一个满足条件的key
+
17.
mixed map_instance.express_set(string path, mixed val)
设置path-value
+
18.
mixed map_instance.express_add(string path, mixed val)
增加path对应value
+
19.
mixed map_instance.express_query(string path)
查询path对应value
+
20.
mixed map_instance.express_delete(string path)
删除path对应value
+
21.
mixed map_instance.get_key_at(int idx)
按照遍历顺序,获取第idx个key;如果索引越界,则会抛出异常
+
22.
mixed map_instance.get_val_at(int idx)
按照遍历顺序,获取第idx个value;如果索引越界,则会抛出异常
+
23.
void map_instance.set_val_at(int idx, mixed val)
按照遍历顺序,设置第idx个value;如果索引越界,则会抛出异常
+

注意

第14项新map的new_pair = [old_pair.key, (*func)(old_pair.value, old_pair.key)]