容器
原创大约 3 分钟
元组
Aviator把Tuple
叫做 数组(效果等同于Scala中的元组),这有点奇怪,我更倾向于叫它元组
。
tuple()
函数可以创建一个固定大小的元组,等价与Java中的Object []
。
t = tuple(1, true, "hello", 3.14);
println("type: " + type(t));
## 遍历tuple
for x in t {
print(x + "\t");
}
println("元素数量:"+ count(t));
## 读取元素
println("t[0] = " + t[0]);
## 修改元素
t[0] = 100;
println("t[0] = " + t[0]);
如果元组中都是同一种数据类型,那就就会真正成为该数据类型的数组。
## 如果输入array(int, 1, "2", 3, 4)会报错,因为字符串无法转换为数字
## 如果输入array(int, 1, 3.14, 3, 4)就可以将3.14转换为3
a = seq.array(int, 1, 2, 3, 4);
println("type(a) is : " + type(a));
b = seq.array(int, 1, 2, 3.14, 4);
println("type(b) is : " + type(b));
## 可以创建一个空数组
c = seq.array_of(int, 10);
println("type(c) is : " + type(b));
for i in range(0, 10) {
c[i] = i;
}
println("length is : " + count(c));
多维元组和普通元组同理。
集合
操作List
。
## 没有任何参数将会是一个空数组
empty_list = seq.list();
println(empty_list);
list = seq.list(1, "2", 3.14159, true);
println(list);
## 遍历
for item in list {
println(item + " -> " + type(item));
}
## 添加元素
seq.add(list, 10);
println(list);
## 修改元素
list[4] = 100;
println(list);
## 删除元素
seq.remove(list, 3.14159);
println(list);
## 判断元素是否在列表中
println("100在列表中?" + include(list, 100));
操作Map
。
## 没有任何参数将会是一个空empty_map = seq.map()
empty_map = seq.map();
println(empty_map);
## key并不要求类型一致,用数字做key也是可以的
map = seq.map("a", 1, "b", 2, "c", 3, 4, 5);
## 遍历map
for x in map {
println(x.key + "=" + x.value);
}
## 读取map元素
println("元素a = " + map.a);
println("元素a = " + map["a"]);
println("元素4 = " + seq.get(map, 4));
println("元素4 = " + map[4]);
## 修改map元素
map.a = 2;
seq.put(map, 4, 11);
println("修改后元素a = " + map.a);
println("修改后元素4 = " + seq.get(map, 4));
## 删除map元素
seq.remove(map, "a");
println("删除后元素a = " + map.a);
## 添加元素到map
seq.put(map, "d", 4);
println(map);
## 判断key是否存在
println("d存在?" + seq.contains_key(map, "d"));
## 得到key和value的集合
println("keys = " + seq.keys(map));
println("values = " + seq.vals(map));
操作Set
。
## 创建set,set也有元组的特性
## 没有任何参数将会是一个空empty_set = seq.set()
empty_set = seq.set();
println(empty_set);
## set中的元素是不会重复的
set = seq.set(10, 2, 2, "hello", 3.3, "hello", true);
println(set);
println("set is: " + type(set));
## 遍历set
for item in set {
println(item);
}
## 读取set中的元素
## key就是集合里的元素,如果存在返回该key本身,不存在返回nil
println(seq.get(set, "hello"));
## 判断元素是否存在
println("2 存在?" + include(set, 2));
## 添加元素
seq.add(set, "world");
println(set);
## 删除set中的元素
seq.remove(set, "hello");
println(set);
Sequence
Sequence
是Aviator对集合的抽象。
## 各种不同的sequence
arr = seq.array(int, 1, 2, 3, 4);
rng = range(-5, 5);
set = seq.set(99, 100, 101);
map = seq.map("a", 1, "b", 2, "c", 3);
lst = seq.list("a", "b", "c");
## 都可以通过for迭代
for e in arr {
print(e + "\t");
}
println();
for e in rng {
print(e + "\t");
}
println();
for e in set {
print(e + "\t");
}
println();
for e in map {
print(e.key + "=" + e.value + "\t");
}
println();
for e in lst {
print(e + "\t");
}
println();
## 除此以外,sequence支持lambda表达式操作
## 把rng中每个元素+1然后生成新的rng
new_range = map(rng, lambda(x) -> x + 1 end);
for e in new_range {
print(e + "\t");
}
Aviator中有很多用于Sequence
的高级函数,例如count
、filter
、reduce
和sort
等,不一一列举。
感谢支持
更多内容,请移步《超级个体》。