[英]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.