簡體   English   中英

如何按另一個列表對列表進行排序

[英]How to sort a list by another list

如何對包含對象的列表進行排序,以便對象的屬性與 dart 中的不同列表相匹配?

class Example {
  String _id;
  String get id => _id;
}

List examples = [Example(id: 'hey'), Example(id: 'foo'), Example(id: 'baa')]
List ids = ['foo', 'baa', 'hey']

print(examples.sortBy(ids)) ???????


OUTPUT:

  [Example(id: 'foo'), Example(id: 'baa'), Example(id: 'hey')]

這不是最高效的方法,但它可能是最簡單的方法之一。 使用基於對象字段在另一個數組中的位置進行排序的排序方法:

final sortedExamples = List.from(examples)
  ..sort((a, b) => ids.indexOf(a.id) - ids.indexOf(b.id));

這種方式稍微復雜一些,但性能更高,因為您只需要對每個列表進行一次迭代。 它涉及從您的列表中創建一個 map,然后使用它作為真實來源來重建一個排序列表:

final ref = Map.fromIterable(examples, key: (e) => e.id, value: (e) => e);
final sortedExamples = List.from(ids.map((id) => ref[id]));

如果空間有問題,第一個選項更好,如果速度有問題,第二個選項更好。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM