小编RBF*_*F06的帖子

Python:使用索引展平嵌套列表

给定一个任意大小的任意深度嵌套列表的列表,我想在树中的所有元素上使用一个平坦的,深度优先的迭代器,但是路径指示也是如此:

for x, y in flatten(L), x == L[y[0]][y[1]]...[y[-1]]. 
Run Code Online (Sandbox Code Playgroud)

那是

L = [[[1, 2, 3], [4, 5]], [6], [7,[8,9]], 10]
flatten(L)
Run Code Online (Sandbox Code Playgroud)

应该产量:

(1, (0, 0, 0)),
(2, (0, 0, 1)),
(3, (0, 0, 2)),
(4, (0, 1, 0)),
(5, (0, 1, 1)),
(6, (1, 0)),
(7, (2, 0)),
(8, (2, 1, 0)),
(9, (2, 1, 1)),
(10, (3,))
Run Code Online (Sandbox Code Playgroud)

我使用带yield语句的生成器为此做了一个递归实现:

def flatten(l):
    for i, e in enumerate(l):
        try:
            for x, y in flatten(e):
                yield x, (i,) + y
        except: …
Run Code Online (Sandbox Code Playgroud)

python recursion iterator nested-lists flatten

12
推荐指数
2
解决办法
917
查看次数

如何在 git 中捆绑子模块更改?

如果我有一个包含子模块的存储库,并且我想为sneakernet制作一个捆绑包,如何使该捆绑包包含更新子模块所需的对象?

例如,假设我有一个名为 的存储库parent,它包含一个名为 的子模块submod。我想创建一个包含自 commit 以来所有最近工作的包,所以很自然地,我会basecommit从根目录中执行以下操作:parent

git bundle create mybundlefile.bundle basecommit..myworkingbranch
Run Code Online (Sandbox Code Playgroud)

这将创建一个名为 的文件,其中包含范围内存储库mybundlefile.bundle中的所有提交对象以及 ref 。问题是,如果这些提交中的任何一个更改了子模块,则生成的捆绑包将不会很有用,因为此类提交仅在更改子模块哈希时存储在捆绑包文件中。因此,存储在捆绑文件中的对象只是说“我正在提交,我将子模块的哈希值从更改为”。但该捆绑包实际上并不包含从捆绑包更新子模块并为.parentbasecommit..myworkingbranchmyworkingbranch3ba024bsubmod2b941cf1bb84ec2b941cf..1bb84ecmyworkingbranch

如何创建捆绑文件,以便还包含子模块存储库中的所有对象。也就是说,如果父存储库的基本提交将basecommit子模块submod指向 hash A,而父存储库的工作分支myworkingbranch将子模块submod指向 hash B,那么我的包不仅需要包含basecommit..myworkingbranch,还需要包含A..B

git bundle git-submodules

4
推荐指数
1
解决办法
3550
查看次数

如何根据 Rust 中的字符串选择结构体?

问题陈述

\n

我有一组结构 、ABCD,它们都实现了一个 Trait\n Runnable

\n
trait Runnable {\n    fn run(&mut self);\n}\nimpl Runnable for A {...}\nimpl Runnable for B {...}\nimpl Runnable for C {...}\nimpl Runnable for D {...}\n
Run Code Online (Sandbox Code Playgroud)\n

我还有一个结构体,用作构造、\n 、和实例Config的规范。ABCD

\n
struct Config {\n    filename: String,\n    other_stuff: u8,\n}\n\nimpl From<Config> for A {...}\nimpl From<Config> for B {...}\nimpl From<Config> for C {...}\nimpl From<Config> for D {...}\n
Run Code Online (Sandbox Code Playgroud)\n

在我的程序中,我想解析一个Config实例并根据字段的值构造A,\n B, C …

string dynamic-dispatch rust trait-objects

4
推荐指数
1
解决办法
138
查看次数

如何在 Rust 中使用传递依赖的特征?

如何在我的应用程序中使用传递依赖项箱中的特征?

这是我遇到的问题的一个最小说明示例:

在 中Cargo.toml,我有:

[dependencies]
mersenne_twister = "1.1.1"
rand = "0.8.5"
Run Code Online (Sandbox Code Playgroud)

我的箱子取决于rand ^0.8.5mersenne_twister ^1.1.1,它本身取决于rand >=0.3, <0.5

my-crate ---> rand 0.8.5
         |
         |
         ---> mersenne_twister 1.1.1  ----> rand >= 0.3, < 0.5
Run Code Online (Sandbox Code Playgroud)

在我的应用程序中,我想使用trait rand::Rng for mersenne_twister::MT19937. 但是当我尝试将这个特征纳入范围时,它显然没有被识别:

my-crate ---> rand 0.8.5
         |
         |
         ---> mersenne_twister 1.1.1  ----> rand >= 0.3, < 0.5
Run Code Online (Sandbox Code Playgroud)

我的猜测是,Rng导入的特征use rand::Rng;来自 的特征rand 0.8.5,而不是实际实现的特征rand 0.4.6MT19937,即使它们的拼写方式相同,但它们是不同且不相关的特征,因此不能互换引用。


所以我有一些问题:

  1. 如何在我的应用程序中使用Rng …

dependencies traits rust transitive-dependency semantic-versioning

4
推荐指数
2
解决办法
74
查看次数

你如何进行特征门特质的推导?

假设你有一个这样的枚举:

#[derive(Debug, Clone, Copy, PartialEq)]
pub enum MyEnum {
    One,
    Two,
    Three,
    Four,
}
Run Code Online (Sandbox Code Playgroud)

但是您只想导出,比如说,如果启用了PartialEq某个功能(我们称之为)。myenum-partialeq

在 Rust 中这是如何惯用地完成的?

traits rust

3
推荐指数
1
解决办法
378
查看次数

你如何定义头文件中的函数?

设置

如果我有这样的程序

一个声明我的主库函数的头文件,primary()并定义了一个简短的简单辅助函数helper().

/* primary_header.h */
#ifndef _PRIMARY_HEADER_H
#define _PRIMARY_HEADER_H

#include <stdio.h>

/* Forward declare the primary workhorse function */
void primary();

/* Also define a helper function */
void helper()
{
    printf("I'm a helper function and I helped!\n");
}
#endif /* _PRIMARY_HEADER_H */
Run Code Online (Sandbox Code Playgroud)

定义它的主要函数的实现文件。

/* primary_impl.c */
#include "primary_header.h"
#include <stdio.h>

/* Define the primary workhorse function */
void primary()
{
    /* do the main work */
    printf("I'm the primary function, I'm doin' work.\n");

    /* …
Run Code Online (Sandbox Code Playgroud)

c program-structure include-guards one-definition-rule

2
推荐指数
2
解决办法
4252
查看次数

如何迭代包含相同元素的切片的连续子序列?

PartialEq我有一个在切片中实现的类型的元素序列。为了便于说明,我们假设它看起来像这样:

let data = [1,1,1,2,2,3,4,5,5,5,5,6];
Run Code Online (Sandbox Code Playgroud)

我想迭代这个序列的借用切片,以便这些切片的所有元素都相等PartialEq。例如,在上面的切片中,data我想要一个迭代器,它会产生:

&data[0..3]   // [1,1,1]
&data[3..5]   // [2,2]
&data[5..6]   // [3]
&data[6..7]   // [4]
&data[7..11]  // [5,5,5,5]
&data[11..12] // [6]
Run Code Online (Sandbox Code Playgroud)

看起来slice::group_by正是我所需要的,但从 Rust 1.72.0 开始,它还不稳定。是否有任何简单的方法可以通过使用第 3 方板条箱或结合使用稳定的 std lib API 以稳定的方式获得此功能?

iterator slice rust

2
推荐指数
1
解决办法
56
查看次数

如何在 Rust 中表示仅具有特定大小的数组

我想要一个表示值数组的数据结构,但它仅支持一组特定的大小并在编译时强制执行。就像是:

struct MyArray<const N: usize>([u8; N]);
Run Code Online (Sandbox Code Playgroud)

但这样的N只能是一组特定的值,而不仅仅是 可以表示的任何数字usize。例如,我希望一个结构体可以包装 a [u8; 3]、 a[u8; 6]或 a [u8; 9],但不能包装除3、6 和 9 之外的[u8; N]任何其他结构体。我需要在编译时强制执行此约束,并且最好是N类型系统。这在 Rust 中可能吗?是否有执行此操作的标准模式或板条箱?

arrays generics rust const-generics

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