Foreachkey语句
UnigineScript的应用范围仅限于实现与材质相关的逻辑(材质表达式,可编写脚本的材质,画笔材质)。 不要将UnigineScript用作应用程序逻辑的语言,请改用C#/C++,因为这些API是首选的。 无法保证UnigineScript中新引擎功能的可用性(超出其应用范围),因为当前的支持级别仅假设已解决关键问题。
foreachkey架构提供另一种方法对矢量 和贴图进行迭代。通过这种语句为每个索引或所给容器内的键执行某些代码。
语法
foreachkey(key_variable; map; loop_increment) {
// some_code;
}
部分
- key_variable为当前间(或索引)。内部容器的游标会移至下一个键值对(或者索引项)所在处。
- key_variable的类型无关紧要。
- 每个迭代的最后执行loop_increment,此为可选选项。
示例
- 结果为:
int map[] = ( "begin" : "flower", "middle" : "fruit", "end" : "tree" ); foreachkey(int i; map) { log.message("%s\t=>\t%s\n",i,map[i]); }
begin => flower end => tree middle => fruit
- 结果为:
int map[] = ( "begin" : "flower", "middle" : "fruit", "end" : "tree" ); foreachkey(int i, j = 0; map; j++) { log.message("%d: %s\t=>\t%s\n",j,i,map[i]); }
0: begin => flower 1: end => tree 2: middle => fruit
在执行之前,以升序的方式将键存储起来。
foreachkey模块内部键的更改不会影响到贴图,但可直接更改值。
int map[] = ( "begin" : "flower", "middle" : "fruit", "end" : "tree" );
foreachkey(int i; map) {
i = "first"; // 贴图不受影响
map[i] = -9.6; // 贴图发生变化
}
Nesting foreachkey嵌套foreachkey#
如果在另一个foreachkey结构内调用了foreachkey 结构,对于每个模块而言应将每个贴图的副本存储起来。(这种方法需要的性能更高。)
int map[] = ( "1" : "head", "2" : "foot" );
int copy[];
copy.copy(map);
foreachkey(int i; map) {
foreachkey(int j; copy) // foreachkey(int j; map)会生成一个错误
{
log.message("%s\t->\t%s\t%s\t->\t%s\n",i,map[i],j,map[j]);
}
}
1 -> head 1 -> head
1 -> head 2 -> foot
2 -> foot 1 -> head
2 -> foot 2 -> foot
最新更新:
2024-12-13
Help improve this article
Was this article helpful?
(or select a word/phrase and press Ctrl+Enter)