创建一个向上或向下步进的迭代器

时间:2015-12-19 20:18:14

标签: rust

理想情况下我喜欢以下内容:

iter = if go_up {
  (min .. limit)
} else {
  (limit .. max).rev()
};

根据情况创建一个向上或向下计数到某个限制的迭代器。但是,由于RangeRev是不同的类型,我无法做到这一点。我可以使用step_by功能,但由于我的限制是无符号数据类型,因此我还必须投射所有内容。我到目前为止最好的是:

#![feature(step_by)]
iter = if go_up {
  (min as i64 .. limit as i64).step_by(1)
} else {
  (limit as i64 .. max as i64).step_by(-1)
};

但是这需要不稳定的功能,并且需要我的类型。似乎应该有一个更简洁的方法来做到这一点;有谁知道吗?

1 个答案:

答案 0 :(得分:2)

就个人而言,你的解决方案

iter = if go_up {
  (min as i64 .. limit as i64).step_by(1)
} else {
  (limit as i64 .. max as i64).step_by(-1)
};

是比Shepmaster的第一个例子更好的选择,因为它更完整(例如,有size_hint),它更可能是正确的作为一种标准工​​具,它的写作速度更快。

这是不稳定的,但是在此期间没有什么可以阻止你复制the source。这为您提供了一个很好的升级途径,以便最终实现稳定。

enum封装技术在更复杂的情况下很棒,但在这种情况下,我很想接受KISS。