将 &T 迭代器收集到 T 集合中的惯用方法是什么?

2023-12-20

我需要收集一个迭代器&strs 进入一个集合&strs。问题是迭代器产生&&strs.

我尝试从映射&word to word,虽然它有效,但我不知道它是否被认为是好的,或者是否有更好的选择。

问题:

use std::collections::HashSet;

fn main() {
    let words = &["hello", "world", "I'm", "a", "Rustacean!"];
    let hashset = words.iter().collect::<HashSet<&str>>();
}
error[E0277]: a collection of type `std::collections::HashSet<&str>` cannot be built from an iterator over elements of type `&&str`
 --> src/main.rs:5:32
  |
5 |     let hashset = words.iter().collect::<HashSet<&str>>();
  |                                ^^^^^^^ a collection of type `std::collections::HashSet<&str>` cannot be built from `std::iter::Iterator<Item=&&str>`
  |
  = help: the trait `std::iter::FromIterator<&&str>` is not implemented for `std::collections::HashSet<&str>`

我的解决方案:

use std::collections::HashSet;

fn main() {
    let words = &["hello", "world", "I'm", "a", "Rustacean!"];
    let hashset = words.iter().map(|&w| w).collect::<HashSet<&str>>();
}

骑自行车是从一个城市到另一个城市的惯用方式吗?就像软件(和生活)中的大多数事物一样,它depends.

如果你的类型实现了Copy

我更喜欢按以下顺序排列:

  1. some_iter.copied()
  2. some_iter.cloned()
  3. some_iter.map(|&v| v)
  4. some_iter.map(|v| *v)
  5. some_iter.map(Clone::clone)
  6. some_iter.map(|v| v.clone())

如果你的类型实现了Clone

我更喜欢按以下顺序排列:

  1. some_iter.cloned()
  2. some_iter.map(Clone::clone)
  3. some_iter.map(|v| v.clone())

如果你的类型没有实现Copy or Clone

那么你就无法轻易地创造出拥有的价值。该类型可以实现ToOwned https://doc.rust-lang.org/std/borrow/trait.ToOwned.html或者可能有一个您可以在其中调用的定制函数或方法map,或者您可能根本无法做任何事情。


在你的情况下,我会使用words.iter().copied().collect::<HashSet<_>>().

也可以看看:

  • 在 Rust 中迭代切片的值而不是引用? https://stackoverflow.com/q/40613725/155423
  • 按值从原始类型引用复制的惯用方法是什么? https://stackoverflow.com/q/25684227/155423
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 &T 迭代器收集到 T 集合中的惯用方法是什么? 的相关文章

随机推荐

  • MySQL:写入从节点

    假设我有一个汽车数据库 我有品牌和型号 FK 到品牌 我计划让用户跟踪他们的汽车 每辆车都有一个 FK 型号 现在 我有很多用户 我想拆分数据库来分配负载 品牌和型号表变化不大 但它们需要跨分片共享 我的想法是使用 MySQL 从品牌和型号
  • 如果我没有关闭 PHP 标签,Notepad++ 函数列表 PHP 将无法工作

    我想在我的 PHP 代码中使用 notepad 的函数列表功能 实际上 如果我编写关闭 PHP 标签 gt 则函数列表可以正常工作 但是如果我没有关闭 PHP 标签 则函数列表将无法工作 我只是想 即使我没有关闭 PHP 标签 函数列表仍然
  • Ajax表单提交,文件未提交

    我正在尝试为我的 Django 表单实现 AJAX 表单提交 这些文件是在没有 AJAX 的情况下提交的 因此服务器端的逻辑似乎可以正常工作 使用ajax 除了文件之外的其余值都会被提交 这是我正在实现的代码 AJAX表单提交 functi
  • XPS 文件的结构是什么

    我认为 XPS 文件就像 PDF 文件 但是 XPS 文件的结构是什么 类似于 PDF 文件吗 CNET 上的 XPS 与 PDF http reviews cnet com 4520 3672 7 6673717 2 html Excer
  • 自定义键盘出现约 5 秒延迟

    我正在使用 objc Xcode 7 制作自定义键盘 尝试了 6 次 问题是键盘加载速度太慢 我尝试加载完全空的UIInputViewController的观点 没有变化 我没有xib 没有大量资源 如果有人知道这个问题的任何解决方案 请写
  • 更新 Javascript 2D 数组中的元素会更新整个列[重复]

    这个问题在这里已经有答案了 我在 Javascript 中创建了一个 2D 数组 4x4 如下所示 let visited new Array 4 fill new Array 4 fill false console log visite
  • Xcode 中的垂直突出显示(列选择)

    如何在 Xcode 中突出显示矩形选区 按住 Option 键的同时单击并拖动 进行垂直突出显示 块选择时 应用正常的复制和粘贴规则 command c 和 command v
  • 如何禁用 Dexguard?

    我浏览了文档 寻找如何在运行 gradle 时禁用 dexguard 但保留插件 dexguard 我尝试修改 proguardFilegetDefaultDexGuardFile dexguard debug pro 什么也不做 但不幸的
  • 键盘关闭时的背景故障

    我面临着我的片段布局 xml 有点复杂的情况 所以层次结构如下 相对布局 无背景 ScrollView fillViewPort true 滚动条 none FrameLayout 无背景 LinearLayout 无背景 Relative
  • 如何在flutter中从ModalBottomSheet刷新ParentStatefulWidget的状态

    我是颤振新手 我对小部件的状态没有正确的了解 我正在创建一个应用程序 在其中从主屏幕向购物车添加一些商品 然后单击 Cartbutton 我打开 ModalBottomSheet 用户还可以在其中修改其购物车商品 以及当用户关闭 Modal
  • 在 jekyll 中生成针对 github 页面的类别页面

    我正在尝试使用 jekyll 为我的 github 页面博客生成类别页面 当我在本地运行时使用jekyll serve这有效 因为它可以使用我的插件 使用这个例子从文档 https jekyllrb com docs plugins gen
  • IIS6 - 为什么我的自定义错误页面不显示?

    我有一个应该显示 HTTP 404 错误的自定义错误页面 事实并非如此 我很难弄清楚为什么 我的 web config 已设置
  • imap:从 C++ 程序发送电子邮件时“无法创建可选择的 TCP 套接字”

    我正在尝试使用 imap 库从 C 程序发送电子邮件 我有一个 Google Apps 和一个要向其发送电子邮件的 Gmail 帐户 每当程序无法发送电子邮件时 我都会将错误记录到文件中 我将程序设置为循环运行以发送电子邮件 有时 我收不到
  • Jsoup POST:定义返回 HTML 的选定选项?

    我正在尝试生成一个 HTML 帖子到一个包含选项列表的页面 有一个下拉列表 用户可以在其中选择一个项目 然后单击生成按钮 根据所选的选项 它会返回不同的结果 我对前后的 HTML 进行了比较 可以看到差异如下 Before
  • 对齐表标题中的文本

    它似乎align不适合th元素 这是我的 HTML div style width 100 height 175px table class grid thead tr th class not mapped style style dis
  • 合并bean定义的后处理失败;嵌套异常是 java.lang.IllegalStateException

    这是我的 OffersDao 课程 package com spring dao import java sql import javax sql DataSource import org springframework beans fa
  • 在我的网站上添加最新推文作为纯文本?

    我有一个 HTML CSS 网站 想要在页脚部分添加我最新的推文 请注意以下几点 我不喜欢他们网站上可用的 Twitter 小部件的外观 我只想将我最新的推文显示为文本 只是最后一条 而不是几条 然后我将添加背景并通过 CSS 自定义字体
  • 如何使用 jasmine 测试带有 DOM 元素的 JavaScript?

    我正在尝试在 jasmine 中为包含 DOM 元素的 JavaScript 代码编写一个测试 但该测试不起作用 当我仅测试 JavaScript 代码 只是简单的函数 但不适用于 DOM 元素 时 它可以工作 我研究了这么久 确实找不到答
  • CollectionView Cell 在水平滚动后向右移动

    我有一个与 CollectionView 大小相同的 collectionView Cell 即一次在屏幕上显示一个 Cell 并且我希望单元格之间的最小间距为 10 问题是当我滚动单元格时 单元格无法正确贴合整个屏幕 并且每次滚动后单元格
  • 将 &T 迭代器收集到 T 集合中的惯用方法是什么?

    我需要收集一个迭代器 strs 进入一个集合 strs 问题是迭代器产生 strs 我尝试从映射 word to word 虽然它有效 但我不知道它是否被认为是好的 或者是否有更好的选择 问题 use std collections Has