我使用ServiceApi::saveStateData({" my -key":some_list});方法将列表保存到我的qorus状态。我想问的是,如何从状态获取列表,并从列表中添加/删除元素并将其放入状态?此外,我还想知道如何加入列表?例如,我想加入some_list下的两个列表,并将其置于状态下?
谢谢你提前帮忙,克莉丝蒂
发布于 2021-01-15 12:29:17
列表总是通过引用传递,即使列表有一个“伪类”(就像Qore中的其他基本类型一样),所有的方法都是只读的。
若要更改列表,请使用+=、+、推、接合、提取运算符、不移位和流行运算符。
问:我如何从列表中添加/删除元素?
选项1:使用提取运算符删除元素:
prompt$: qore -ne 'list<auto> l = (1, 2, 3, 4); printf("removed: %y\n", (extract l, 1, 2)); printf("l: %y\n", l);'
removed: [2, 3]
l: [1, 4]选项2:使用带有范围的删除操作符删除列表中的一个片段:
prompt$ qore -ne 'list<auto> l = (1, 2, 3, 4); printf("removed: %y\n", remove l[1..2]); printf("l: %y\n", l);'
removed: [2, 3]
l: [1, 4]问:我怎样才能加入名单?
prompt$ qore -ne 'list<auto> l1 = (1, 2); list<auto> l2 = (3, 4); printf("new list: %y\n", l1 + l2);'
new list: [1, 2, 3, 4]
prompt$ qore -ne 'list<auto> l1 = (1, 2); list<auto> l2 = (3, 4); l1 += l2; printf("new list: %y\n", l1);'
new list: [1, 2, 3, 4]注意,要将一个列表作为单个元素添加到另一个列表中,最好使用推操作符:
qore -ne 'list<auto> l1 += (1, 2); list<auto> l2 = (3, 4); push l1, l2; printf("new list: %y\n", l1);'
new list: [1, 2, [3, 4]]请注意,我将+=用于上面的原始赋值,以确保l1具有list<auto>类型--因为简单的赋值会导致list<int>,这将导致push表达式抛出异常。
还请注意,由于列表是Qore中的基本类型,因此它们总是通过值传递(从技术上讲,它们是通过引用使用副本上写入语义传递的),而列表的“伪类” (就像在copy中的所有伪类一样)只实现只读方法;在copy中更新lvalue只使用操作符。这是因为,由于Qore的多线程特性,更新Qore中的lvalue非常复杂。所有的Qore运算符都是线程原子的,只有在保证一致性和原子性的操作符下才能改变lvalue,即使在复杂表达式中也是如此。
上述情况的例外是对象,对象总是通过引用传递(实际上技术上是引用的副本,类似于Java);所有其他值类型都是通过值传递的。
https://stackoverflow.com/questions/65733349
复制相似问题