Dart 在SplayTreeSet上反向迭代
根据Dart 在SplayTreeSet上反向迭代,dart,Dart,根据Set文档: LinkedHashSet按其元素的插入顺序进行迭代,并且 像SplayTreeSet这样的排序集迭代排序中的元素 秩序 因此,如果您想要设置功能并控制迭代顺序,SplayTreeSet是正确的选择 但是,如何才能有效地以相反的顺序对集合进行迭代(如STLreverse\u iterator)? 在某些情况下,我想向前走,而在其他情况下,我想反向走。现在splay.toList()。反向的似乎就是这样做的。您也许可以在SplayTreeSet上添加reversed属性,但没有退
Set
文档:
LinkedHashSet按其元素的插入顺序进行迭代,并且
像SplayTreeSet这样的排序集迭代排序中的元素
秩序
因此,如果您想要设置功能并控制迭代顺序,SplayTreeSet
是正确的选择
但是,如何才能有效地以相反的顺序对集合进行迭代(如STLreverse\u iterator
)?
在某些情况下,我想向前走,而在其他情况下,我想反向走。现在
splay.toList()。反向的似乎就是这样做的。您也许可以在SplayTreeSet
上添加reversed
属性,但没有退步的方法
在SplayTreeSet上使用反转
会有某种意义。它将基于同一棵树,但只需交换first/last和迭代顺序的含义
通常使用反向的比较器创建集合就足够了,但是如果您想在同一张地图上同时进行,或者在创建集合之前不知道方向,则没有简单的解决方案 “或者没有简单的解决方案”——这是否意味着考虑到它的实现方式?是-在这种情况下,我希望在一个集合中包含相同的数据,在某些情况下,我将向前迭代,而在其他情况下,我将反向迭代。也许有更好的方法,但假设你有一个分类的账户集合来资助活动和投资。它们的分类是这样的:在融资时,你应该从末端选择账户出售不受欢迎的资产,但在投资时,你应该根据分类标准从前端投资购买最受欢迎的资产。当余额降至0时,set功能有助于删除帐户或添加帐户以进行反向。我可以看到反向迭代的有用性。有两种方法可以做到这一点:要么将迭代器设置为双向迭代器(这很少见,而且通常没有那么有用),要么将集合设置为一个反向视图,要么将其设置为一个Iterable(因此仅向后迭代),要么将其设置为一个可以用作任何其他集合的集合,仅由原始集合支持。没有任何东西会从本质上阻止这两种解决方案,这“只是”实现它的问题。