如何在 Dart 中循环枚举

Posted

技术标签:

【中文标题】如何在 Dart 中循环枚举【英文标题】:How to loop over an enum in Dart 【发布时间】:2021-03-01 08:56:56 【问题描述】:

我的 Flutter 项目中有一个 Dart 枚举,如下所示:

enum RepeatState 
  playSongOnce,
  repeatSong,
  repeatPlaylist,

如果我有一些像 RepeatState.repeatSong 这样的随机枚举状态,我如何迭代到下一个枚举(不做类似使用 switch 语句映射它们的事情)?

我在this、this和this的帮助下找到了答案,所以我把它贴在下面。

【问题讨论】:

【参考方案1】:

给定一个像这样的枚举,

enum MyEnum 
  horse,
  cow,
  camel,
  sheep,
  goat,

遍历枚举值

您可以使用values 属性迭代枚举的值:

for (var value in MyEnum.values) 
  print(value);


// MyEnum.horse
// MyEnum.cow
// MyEnum.camel
// MyEnum.sheep
// MyEnum.goat

值与其索引之间的转换

每个值都有一个索引:

int index = MyEnum.horse.index; // 0

您可以使用下标表示法将索引转换回枚举:

MyEnum value = MyEnum.values[0]; // MyEnum.horse

寻找下一个枚举值

结合这些事实,您可以遍历枚举的值以找到下一个值,如下所示:

MyEnum nextEnum(MyEnum value) 
  final nextIndex = (value.index + 1) % MyEnum.values.length;
  return MyEnum.values[nextIndex];

即使索引位于枚举值列表的末尾,也使用模运算符句柄:

MyEnum nextValue = nextEnum(MyEnum.goat); // MyEnum.horse

【讨论】:

【参考方案2】:
enum Fruites  Mango, Banana, Cherry, Avacado, Papaya 

void main() 
  Fruites.values.forEach((name) 
    print(name);
  );

输出:

Fruites.Mango
Fruites.Banana
Fruites.Cherry
Fruites.Avacado
Fruites.Papaya

只取名字部分

print(name.toString().split('.').elementAt(1));

输出:

Mango
Banana
Cherry
Avacado
Papaya

【讨论】:

以上是关于如何在 Dart 中循环枚举的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Dart 中按“枚举”对列表进行排序?

如何在 Flutter dart 的列表中的循环内附加数据?

如何打破 Dart 中的嵌套循环

如何从循环中遍历枚举中的条目[重复]

如何在 Dart Flutter 的字典数组中获取某些键的值?

如何在 Dart 中逐个字符地迭代字符串?