如何获取vfor中的key值并打印到控制台?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何获取vfor中的key值并打印到控制台?相关的知识,希望对你有一定的参考价值。

参考技术A

方法/步骤

    第一步,双击打开HBuilder工具,新建html5静态页面,并在页面中引入d3.js核心文件,如下图所示:

    请点击输入图片描述

    第二步,在<script></script>标签中,定义一个对象obj,然后调用d3.keys()方法获取对象的key,如下图所示:

    请点击输入图片描述

    第三步,保存代码并直接打开浏览器预览打印结果,可以发现获取对象的key值,如下图所示:

    请点击输入图片描述

    第四步,将d3中的方法keys改为values,对应的values是获取对象的value值,如下图所示:

    请点击输入图片描述

    第五步,再次保存代码并打开浏览器查看打印结果,注意在浏览器控制台查看,如下图所示:

    请点击输入图片描述

    第六步,最后如果将values方法改为entries,这个方法是可以获取keys和values,如下图所示:

    请点击输入图片描述

hashmap - 如何遍历Hashmap,打印键/值并删除Rust中的值?

在任何语言中,这都应该是一项微不足道的任务。这在铁锈中不起作用。

use std::collections::HashMap;

fn do_it(map: &mut HashMap<String, String>) {
    for (key, value) in map {
        println!("{} / {}", key, value);
        map.remove(key);
    }
}

fn main() {}


以下是编译器错误:

<span style="color:#212529"><span style="background-color:#ffffff"><code style="margin-left:2px">error[E0382]: use of moved value: `*map`
 --> src/main.rs:6:9
  |
4 |     for (key, value) in map {
  |                         --- value moved here
5 |         println!("{} / {}", key, value);
6 |         map.remove(key);
  |         ^^^ value used here after move
  |
  = note: move occurs because `map` has type `&mut std::collections::HashMap<std::string::String, std::string::String>`, which does not implement the `Copy` trait
</code></span></span>


为什么要移动引用?从文档来看,我不认为移动/借用适用于引用。

最佳答案

不允许这样做至少有两个原因:
您需要有两个对map的并发可变引用,一个由for循环中使用的迭代器持有,另一个在变量map中调用map.remove
在尝试对映射进行变异时,对映射中的键和值具有引用。如果允许您以任何方式修改映射,则这些引用可能会失效,从而打开内存不安全的大门。
核心生锈原理是混淆异或可变性。您可以对一个值有多个不可变的引用,也可以对它有单个不可变的引用。
我不认为搬家/借书适用于推荐人。
每种类型都受制于Rust的移动规则和可变别名。请让我们知道文件中的哪些部分说它不是,这样我们就可以解决这个问题。
为什么要移动引用?
它由两部分组成:
只能有一个可变引用
for循环take the value to iterate over by value
当您调用for (k, v) in map {}时,map的所有权将转移到for循环,现在已不复存在。
我将对映射执行不可变的借用(&*map)并对其进行迭代。最后,我会把事情弄清楚:

fn do_it(map: &mut HashMap<String, String>) {
    for (key, value) in &*map {
        println!("{} / {}", key, value);
    }
    map.clear();
}


用以字母“a”开头的键删除每个值
我会用HashMap::retain

fn do_it(map: &mut HashMap<String, String>) {
    map.retain(|key, value| {
        println!("{} / {}", key, value);

        !key.starts_with("a")
    })
}


这就保证了当地图实际上被修改时,已经不存在了,所以任何借来的都已经过去了。

关于hashmap - 如何遍历Hashmap,打印键/值并删除Rust中的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58380395/

以上是关于如何获取vfor中的key值并打印到控制台?的主要内容,如果未能解决你的问题,请参考以下文章

从 websocket 过滤 json 对象/值并打印到控制台日志

从websocket过滤json对象/值并打印到控制台日志

如何遍历 Hashmap、打印键/值并删除 Rust 中的值?

如何从 <td> 获取值并保存到 php 中的数据库

如何获取用户选择的按钮值并在 laravel 5.4 的控制器上使用它

遍历 BSTR 的 VARIANT/SAFEARRAY 以在 C++ 中分配值并打印到控制台