小编Chr*_*cki的帖子

如何在 Rust 中迭代序列的所有唯一排列?

给定一个值列表,例如vec![0, 0, 1, 2],我想创建一个迭代器来生成其所有独特的排列。那是,

[0, 0, 1, 2]
[0, 0, 2, 1]
[0, 1, 0, 2]
[0, 1, 2, 0]
[0, 2, 0, 1]
[0, 2, 1, 0]
[1, 0, 0, 2]
[1, 0, 2, 0]
[1, 2, 0, 0]
[2, 0, 0, 1]
[2, 0, 1, 0]
[2, 1, 0, 0]
Run Code Online (Sandbox Code Playgroud)

(请注意,有 12 种不同的排列,而如果我们有 4 个不同的元素,则会有 24 种不同的排列)。

已经有一种方法可以使用itertools 包生成排列(以及其他迭代器,如组合或没有替换的组合),但对于排列,没有办法将排列限制为唯一的排列。

有一种相当有效的算法来生成排列,通常称为堆算法,但这并没有考虑值的相等性/重复性。

这个问题在带有生成器的语言中实现并不是太棘手,比如 Python,但我觉得这在 Rust 中更棘手(至少与上面的解决方案相比),因为它需要使用迭代器(它必须保持内部状态) ,或使用生成器(目前不稳定)。

algorithm permutation rust

7
推荐指数
1
解决办法
3086
查看次数

有没有办法在 Rust 中模拟字符串文字类型?

有关字符串文字类型的示例,请参阅此 TypeScript 文档:https://www.typescriptlang.org/docs/handbook/2/everyday-types.html#literal-types

对于示例用例,我希望能够创建一个用于对表格数据执行操作的库,其中表的列被命名并具有异构类型。

假设我有一张这样的表:

| name    | age | quiz1 | quiz2 | midterm | quiz3 | quiz4 | final |
| ------- | --- | ----- | ----- | ------- | ----- | ----- | ----- |
| "Bob"   | 12  | 8     | 9     | 77      | 7     | 9     | 87    |
| "Alice" | 17  | 6     | 8     | 88      | 8     | 7     | 85    |
| "Eve"   | 13  | 7 …
Run Code Online (Sandbox Code Playgroud)

rust

5
推荐指数
1
解决办法
2099
查看次数

标签 统计

rust ×2

algorithm ×1

permutation ×1