容器类型(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[<n] 获取数组 倒数第n个元素
-
array_instance[m..n] 获取第m个元素到第n个元素构成的子数组
-
array_instance[m..<n] 获取第m个元素到倒数n个元素构成的子数组
-
array_instance[<m..<n] 获取倒数第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)]