Sorting dart-对未来列表进行排序
所以我有一组选项,每个选项都包含一个int值,表示它们的序号 这些选项存储在远程数据库中,每个选项都是一条记录。 因此,当我从数据库中获取它们时,我会得到一个未来的列表: e、 g.Sorting dart-对未来列表进行排序,sorting,dart,future,Sorting,Dart,Future,所以我有一组选项,每个选项都包含一个int值,表示它们的序号 这些选项存储在远程数据库中,每个选项都是一条记录。 因此,当我从数据库中获取它们时,我会得到一个未来的列表: e、 g.列表 我需要能够对这些选项进行排序 下面的省道板显示了我试图实现的目标的简化视图: 期权必须是期货。 我最初的解决方案是将选项复制到一个列表中,“完成”它们,然后对列表进行排序。 然而,这导致了其他问题,因此我需要对原始列表进行“现场”排序。在期货完成之前,您不能对期货进行排序,即使这样,您也需要先提取值。 如果你
列表
我需要能够对这些选项进行排序
下面的省道板显示了我试图实现的目标的简化视图:
期权必须是期货。
我最初的解决方案是将选项复制到一个列表中,“完成”它们,然后对列表进行排序。
然而,这导致了其他问题,因此我需要对原始列表进行“现场”排序。在期货完成之前,您不能对期货进行排序,即使这样,您也需要先提取值。 如果你以后需要一份期货清单,我会这样做:
List<Future<T>> sortFutures<T>(List<Future<T>> input, [int compare(T a, T b)]) {
var completers = [for (var i = 0; i < input.length; i++) Completer<T>()];
Future.wait(input).then((values) {
values.sort(compare);
for (int i = 0; i < values.length; i++) {
completers[i].complete(values[i]);
}
});
return [for (var c in completers) c.future];
}
List排序未来(列表输入,[int比较(ta,tb)]){
var completers=[for(var i=0;i
这不会返回原始期货,因为在您必须返回它们时,您不知道订单。它确实会返回具有相同价值的期货
如果任何一个期货交易以一个错误完成,那么这个交易就失败了。如果可能的话,您将需要更多的错误处理。Gentlfolk,
谢谢你的帮助
julemand101使用Future.wait()的建议引导我找到答案
这也帮助我更好地理解这个问题
我做了一个新的要点,更准确地展示了我试图做的事情
基本上,当我们通过网络执行db请求时,我们会得到一个实体。
问题是该实体通常会引用其他实体。
这可以在需要返回的整个实体树中结束。
通常,您不需要这些实体中的任何一个
因此,我们采用的解决方案是只返回每个子实体(仅直接子实体)的数据库“id”
然后我们将这些id存储在类RefId中(见下文)
RefId本质上是一个future
,它具有实体id,并且知道如何从数据库中获取实体
当我们实际需要访问一个子实体时,我们强制完成RefId(即跨网络边界检索实体)。
我们有一个完整的缓存方案来保持这一性能,并且能够强制获取子元素,作为父请求的一部分,我们预先知道需要它们
我的示例中的选项本质上是需要排序的菜单项。
当然,在它们被取回之前,我无法对它们进行分类。
因此,重新编写一个示例和答案:
以下是我们使用的实际IdRef类:
它现在有一个静态的resolveList
方法来帮助解决这类问题
谢谢您的帮助。
您是否考虑过使用<代码> Engest.Walue< /Cord>将期货列表解析为可以稍后排序的值列表?