gpt4 book ai didi

rust - 如何在 Rust 中将 std::iter::Iterator::map 用于树状结构?

转载 作者:行者123 更新时间:2023-12-01 11:11:02 25 4
gpt4 key购买 nike

据我所知,在 Rust 中将函数应用于结构的每个元素的惯用方法是实现 IntoIteratorFromIterator 并使用 mapcollect。像这样:

enum F<A> {
// fields omitted
}

impl<A> IntoIterator for F<A> {
// implementation omitted
}

impl<A> FromIterator<A> for F<A> {
// implementation omitted
}

fn mapF<A, B>(x : F<A>, f) -> F<B>
where f : Fn(A) -> B
{
x.into_iter().map(f).collect()
}

然而,为树实现 FromIterator 似乎是不可能的,因为有多种方法可以将一系列值组织到树中。有什么办法解决这个问题吗?

最佳答案

the idiomatic way to apply a function to each element of a structure in Rust, is to implement IntoIterator and FromIterator

这并不完全正确。惯用的方法是提供一个迭代器,但您不必实现这些特征。

&str为例:没有规范的方法来迭代字符串。您可以迭代其字节或字符,因此它不会实现 IntoIterator但有两种方法 byteschars返回不同类型的迭代器。

一棵树会很相似:没有一种方法可以迭代一棵树,所以它可能有一个 depth_first_search返回 DepthFirstSearch 的方法迭代器和一个 breadth_first_search返回 BreadthFirstSearch 的方法迭代器。

类似String可以从 &str 的迭代器构造或 char 的迭代器所以String同时实现 FromIterator<&str>FromIterator<char> , 但它没有实现 FromIterator<u8>因为随机字节不太可能形成有效的 UTF-8 字符串。

也就是说,集合与其迭代器之间并不总是一对一的关系。


and use […] collect

这(大部分)是不正确的。收集不是使用迭代器的好方法,除非您之后确实想使用收集的结果。如果只想执行迭代器的效果,请使用 for for_each 方法。

关于rust - 如何在 Rust 中将 std::iter::Iterator::map 用于树状结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60488713/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com