如何以编程方式创建元组数组?

Jos*_*osh -1 rust

我认为必须有一种动态的方式来执行以下操作。这里有一个隐含的问题,即如何动态创建原始值数组?请注意:我不需要向量。

let mut positional_frequencies: [[(u16, char); 26]; 5] = [ 
             [(0, 'A'), (0, 'B'), (0, 'C'), (0, 'D'), (0, 'E'),
             (0, 'F'), (0, 'G'), (0, 'H'), (0, 'I'), (0, 'J'),
             (0, 'K'), (0, 'L'), (0, 'M'), (0, 'N'), (0, 'O'),
             (0, 'P'), (0, 'Q'), (0, 'R'), (0, 'S'), (0, 'T'),
             (0, 'U'), (0, 'V'), (0, 'W'), (0, 'X'), (0, 'Y'),
             (0, 'Z')],
             [(0, 'A'), (0, 'B'), (0, 'C'), (0, 'D'), (0, 'E'),
             (0, 'F'), (0, 'G'), (0, 'H'), (0, 'I'), (0, 'J'),
             (0, 'K'), (0, 'L'), (0, 'M'), (0, 'N'), (0, 'O'),
             (0, 'P'), (0, 'Q'), (0, 'R'), (0, 'S'), (0, 'T'),
             (0, 'U'), (0, 'V'), (0, 'W'), (0, 'X'), (0, 'Y'),
             (0, 'Z')],
             [(0, 'A'), (0, 'B'), (0, 'C'), (0, 'D'), (0, 'E'),
             (0, 'F'), (0, 'G'), (0, 'H'), (0, 'I'), (0, 'J'),
             (0, 'K'), (0, 'L'), (0, 'M'), (0, 'N'), (0, 'O'),
             (0, 'P'), (0, 'Q'), (0, 'R'), (0, 'S'), (0, 'T'),
             (0, 'U'), (0, 'V'), (0, 'W'), (0, 'X'), (0, 'Y'),
             (0, 'Z')],
             [(0, 'A'), (0, 'B'), (0, 'C'), (0, 'D'), (0, 'E'),
             (0, 'F'), (0, 'G'), (0, 'H'), (0, 'I'), (0, 'J'),
             (0, 'K'), (0, 'L'), (0, 'M'), (0, 'N'), (0, 'O'),
             (0, 'P'), (0, 'Q'), (0, 'R'), (0, 'S'), (0, 'T'),
             (0, 'U'), (0, 'V'), (0, 'W'), (0, 'X'), (0, 'Y'),
             (0, 'Z')],
             [(0, 'A'), (0, 'B'), (0, 'C'), (0, 'D'), (0, 'E'),
             (0, 'F'), (0, 'G'), (0, 'H'), (0, 'I'), (0, 'J'),
             (0, 'K'), (0, 'L'), (0, 'M'), (0, 'N'), (0, 'O'),
             (0, 'P'), (0, 'Q'), (0, 'R'), (0, 'S'), (0, 'T'),
             (0, 'U'), (0, 'V'), (0, 'W'), (0, 'X'), (0, 'Y'),
             (0, 'Z')]
         ];  

Run Code Online (Sandbox Code Playgroud)

Pit*_*taJ 6

更惯用和更高效的方法是使用迭代器:

    let mut positional_frequencies: [[(u16, char); 26]; 5] = Default::default();
    for outer in positional_frequencies.iter_mut() {
        for (inner, c) in outer.iter_mut().zip('A'..='Z') {
            *inner = (0, c);
        }
    }
Run Code Online (Sandbox Code Playgroud)

通过使用迭代器,您不必担心意外弄乱边界。例如,如果将数组的长度更改为 6,则会自动覆盖这里。

zip组合两个迭代器,为每个元素创建一对。这样,您不需要任何直接的角色添加或as演员阵容。