当前位置: 首页 > 知识库问答 >
问题:

如何在Dart中循环遍历枚举

甄佐
2023-03-14

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

dart prettyprint-override">enum RepeatState {
  playSongOnce,
  repeatSong,
  repeatPlaylist,
}

如果我有一些随机枚举状态,如RepeatState.repeatSong,我如何迭代到下一个枚举(而不需要做一些事情,如用开关语句映射它们)?

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

共有2个答案

贺英悟
2023-03-14
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
闽鸿宝
2023-03-14

给定这样一个枚举,

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

您可以使用value属性遍历枚举的值:

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
 类似资料:
  • 问题内容: 我需要遍历一个post数组并对其求和。 但是我不知道从哪里开始。 问题答案: 这是您的操作方式: 这会照顾传入的变量和数组。

  • 我正在MST上的CLRS中尝试ch23,这里有一个问题: 给定一个图G和一个最小生成树T,假设我们减少不在T中的一条边的权重。给出了在修改图中求最小生成树的算法。 我找到的一个解决方案是在中添加此新更改的边,然后在T中创建一个简单的循环,遍历此循环并删除此循环中的最大权重边,瞧,找到了新更新的MST! 我的问题是,如何在这个简单循环中只遍历节点?因为如果我在中从这个新添加的边的一个endpoint

  • 对于这个问题,我需要用一个公式求出两个点之间的距离,给定两个点的坐标和值p。我让程序为一个输入行工作,但我希望用户能够输入多行,并让程序循环通过它们。例如: 1.0 1.0 2.0 2.0 1.0 我对java相当陌生,还在学习,所以我很感激我能得到的任何帮助。提前谢了。

  • 问题内容: 因此,我以为我可以像普通对象一样遍历localStorage,因为它具有长度。我该如何循环? 如果我这样做,则返回正确。所以我认为循环会起作用。 我在想类似的东西: 但无济于事。有任何想法吗? 我的另一个想法是 在其中工作。 问题答案: 您可以使用该方法。 返回第一个键(顺序是实现定义的,但是在您添加或删除键之前是恒定的)。 如果顺序很重要,则可以存储JSON序列化数组: 规范草案声称

  • 在给定的数组中,我想计算左边唯一的连续值,这些值小于或等于每个值。 例如在下面的数组中,第一个索引值是100,所以没有比它更小的值,它将是1。对于值70,有60比它小,所以计数是2,依此类推。 注意:这应该使用stack来完成(这是一个stack实践问题)。 我的方法是: 我试图用这种方式解决: 在数组中运行循环,每次向堆栈添加数组值 问题:现在的问题是:因为它第一次会正常工作,但下一次不会。 问

  • 我有一个简单的枚举,我想迭代一下。为此,我采用了顺序和迭代器协议,如下面的代码所示。顺便说一句,这可以复制/粘贴到Xcode 8中的游乐场。 但是for in循环生成错误消息“Type”节。Type不符合协议“Sequence”。协议一致性在我的扩展中;那么,这个代码有什么问题? 我知道还有其他方法可以做到这一点,但我想知道这种方法有什么问题。 谢谢