如何在Dart/Flutter中按字母顺序对Set<String>进行排序?

6

我知道有 List<string>,但我需要使用 Set<string>。有没有办法按字母顺序排序?

Set reasons = {
  'Peter',
  'John',
  'James',
  'Luke',
}

集合的类型未指定。文档提到该集合是无序的。那么排序有什么意义呢?我不理解。 - Melvin Calvin
2个回答

14

使用SplayTreeSet代替:

import 'dart:collection';

...

final sortedSet = SplayTreeSet.from(
  {'Peter', 'John', 'James', 'Luke'},
  // Comparison function not necessary here, but shown for demonstrative purposes 
  (a, b) => a.compareTo(b), 
);
print(sortedSet);

// Prints: {James, John, Luke, Peter}

正如jamesdlin所指出的,如果该类型实现了Comparable,则比较函数就不是必需的。


1
请注意,尽管此处的示例明确传递了比较回调(我假设这是为了演示目的),但如果元素已经是“可比较”的(例如String),则回调是不必要的。 - jamesdlin

5
你可以将一个 set 转换为 list 并调用 sort 方法。然后你可以再次将该列表转换为 set。你也可以在 Set 上创建一个方便的扩展方法来完成这件事。
Set reasons = {
  'Peter',
  'John',
  'James',
  'Luke',
};
final reasonsList = reasons.toList();
reasonsList.sort();
print(reasonsList.toSet());

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接