Rust vs Go:常用语法对比(十三)
题图来自 Go vs. Rust: The Ultimate Performance Battle
241. Yield priority to other threads
Explicitly decrease the priority of the current process, so that other execution threads have a better chance to execute now. Then resume normal execution and call function busywork.
将优先权让给其他线程
package main
import (
"fmt"
"runtime"
"time"
)
func main() {
go fmt.Println("aaa")
go fmt.Println("bbb")
go fmt.Println("ccc")
go fmt.Println("ddd")
go fmt.Println("eee")
runtime.Gosched()
busywork()
time.Sleep(100 * time.Millisecond)
}
func busywork() {
fmt.Println("main")
}
After Gosched, the execution of the current goroutine resumes automatically.
aaa
eee
ccc
bbb
ddd
main
::std::thread::yield_now();
busywork();
242. Iterate over a set
Call a function f on each element e of a set x.
迭代一个集合
package main
import "fmt"
type T string
func main() {
// declare a Set (implemented as a map)
x := make(map[T]bool)
// add some elements
x["A"] = true
x["B"] = true
x["B"] = true
x["C"] = true
x["D"] = true
// remove an element
delete(x, "C")
for e := range x {
f(e)
}
}
func f(e T) {
fmt.Printf("contains element %v \n", e)
}
contains element A
contains element B
contains element D
use std::collections::HashSet;
fn main() {
let mut x = HashSet::new();
x.insert("a");
x.insert("b");
for item in &x {
f(item);
}
}
fn f(s: &&str) {
println!("Element {}", s);
}
x is a HashSet
Element a
Element b
243. Print list
Print the contents of list a on the standard output.
打印 list
package main
import (
"fmt"
)
func main() {
{
a := []int{11, 22, 33}
fmt.Println(a)
}
{
a := []string{"aa", "bb"}
fmt.Println(a)
}
{
type Person struct {
First string
Last string
}
x := Person{
First: "Jane",
Last: "Doe",
}
y := Person{
First: "John",
Last: "Doe",
}
a := []Person{x, y}
fmt.Println(a)
}
{
x, y := 11, 22
a := []*int{&x, &y}
fmt.Println(a)
}
}
[11 22 33]
[aa bb]
[{Jane Doe} {John Doe}]
[0xc000018080 0xc000018088]
fn main() {
let a = [11, 22, 33];
println!("{:?}", a);
}
[11, 22, 33]
244. Print map
Print the contents of map m to the standard output: keys and values.
打印 map
package main
import (
"fmt"
)
func main() {
{
m := map[string]int{
"eleven": 11,
"twenty-two": 22,
}
fmt.Println(m)
}
{
x, y := 7, 8
m := map[string]*int{
"seven": &x,
"eight": &y,
}
fmt.Println(m)
}
}
map[eleven:11 twenty-two:22]
map[eight:0xc000100040 seven:0xc000100028]
use std::collections::HashMap;
fn main() {
let mut m = HashMap::new();
m.insert("Áron".to_string(), 23);
m.insert("Béla".to_string(), 35);
println!("{:?}", m);
}
{"Béla": 35, "Áron": 23}
245. Print value of custom type
Print the value of object x having custom type T, for log or debug.
打印自定义类型的值
package main
import (
"fmt"
)
// T represents a tank. It doesn't implement fmt.Stringer.
type T struct {
name string
weight int
firePower int
}
// Person implement fmt.Stringer.
type Person struct {
FirstName string
LastName string
YearOfBirth int
}
func (p Person) String() string {
return fmt.Sprintf("%s %s, born %d", p.FirstName, p.LastName, p.YearOfBirth)
}
func main() {
{
x := T{
name: "myTank",
weight: 100,
firePower: 90,
}
fmt.Println(x)
}
{
x := Person{
FirstName: "John",
LastName: "Doe",
YearOfBirth: 1958,
}
fmt.Println(x)
}
}
Will be more relevant if T implements fmt.Stringer
{myTank 100 90}
John Doe, born 1958
#[derive(Debug)]
// T represents a tank
struct T<'a> {
name: &'a str,
weight: &'a i32,
fire_power: &'a i32,
}
fn main() {
let x = T {
name: "mytank",
weight: &100,
fire_power: &90,
};
println!("{:?}", x);
}
Implement fmt::Debug or fmt::Display for T
T { name: "mytank", weight: 100, fire_power: 90 }
246. Count distinct elements
Set c to the number of distinct elements in list items.
计算不同的元素的数量
package main
import (
"fmt"
)
func main() {
type T string
items := []T{"a", "b", "b", "aaa", "c", "a", "d"}
fmt.Println("items has", len(items), "elements")
distinct := make(map[T]bool)
for _, v := range items {
distinct[v] = true
}
c := len(distinct)
fmt.Println("items has", c, "distinct elements")
}
items has 7 elements
items has 5 distinct elements
use itertools::Itertools;
fn main() {
let items = vec!["víz", "árvíz", "víz", "víz", "ár", "árvíz"];
let c = items.iter().unique().count();
println!("{}", c);
}
3
247. Filter list in-place
Remove all the elements from list x that don't satisfy the predicate p, without allocating a new list.
Keep all the elements that do satisfy p.
For languages that don't have mutable lists, refer to idiom #57 instead.
就地筛选列表
package main
import "fmt"
type T int
func main() {
x := []T{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
p := func(t T) bool { return t%2 == 0 }
j := 0
for i, v := range x {
if p(v) {
x[j] = x[i]
j++
}
}
x = x[:j]
fmt.Println(x)
}
[2 4 6 8 10]
or
package main
import "fmt"
type T int
func main() {
var x []*T
for _, v := range []T{1, 2, 3, 4, 5, 6, 7, 8, 9, 10} {
t := new(T)
*t = v
x = append(x, t)
}
p := func(t *T) bool { return *t%2 == 0 }
j := 0
for i, v := range x {
if p(v) {
x[j] = x[i]
j++
}
}
for k := j; k < len(x); k++ {
x[k] = nil
}
x = x[:j]
for _, pt := range x {
fmt.Print(*pt, " ")
}
}
2 4 6 8 10
fn p(t: i32) -> bool {
t % 2 == 0
}
fn main() {
let mut x = vec![1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
let mut j = 0;
for i in 0..x.len() {
if p(x[i]) {
x[j] = x[i];
j += 1;
}
}
x.truncate(j);
println!("{:?}", x);
}
[2, 4, 6, 8, 10]
or
fn p(t: &i64) -> bool {
t % 2 == 0
}
fn main() {
let mut x: Vec<i64> = vec![1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
x.retain(p);
println!("{:?}", x);
}
[2, 4, 6, 8, 10]
249. Declare and assign multiple variables
Define variables a, b and c in a concise way. Explain if they need to have the same type.
声明并分配多个变量
package main
import (
"fmt"
)
func main() {
// a, b and c don't need to have the same type.
a, b, c := 42, "hello", 5.0
fmt.Println(a, b, c)
fmt.Printf("%T %T %T \n", a, b, c)
}
42 hello 5
int string float64
fn main() {
// a, b and c don't need to have the same type.
let (a, b, c) = (42, "hello", 5.0);
println!("{} {} {}", a, b, c);
}
42 hello 5
251. Parse binary digits
Extract integer value i from its binary string representation s (in radix 2) E.g. "1101" -> 13
解析二进制数字
package main
import (
"fmt"
"reflect"
"strconv"
)
func main() {
s := "1101"
fmt.Println("s is", reflect.TypeOf(s), s)
i, err := strconv.ParseInt(s, 2, 0)
if err != nil {
panic(err)
}
fmt.Println("i is", reflect.TypeOf(i), i)
}
s is string 1101
i is int64 13
fn main() {
let s = "1101"; // binary digits
let i = i32::from_str_radix(s, 2).expect("Not a binary number!");
println!("{}", i);
}
13
252. Conditional assignment
Assign to variable x the value "a" if calling the function condition returns true, or the value "b" otherwise.
条件赋值
package main
import (
"fmt"
)
func main() {
var x string
if condition() {
x = "a"
} else {
x = "b"
}
fmt.Println(x)
}
func condition() bool {
return "Socrates" == "dog"
}
b
x = if condition() { "a" } else { "b" };
258. Convert list of strings to list of integers
Convert the string values from list a into a list of integers b.
将字符串列表转换为整数列表
package main
import (
"fmt"
"strconv"
)
func main() {
a := []string{"11", "22", "33"}
b := make([]int, len(a))
var err error
for i, s := range a {
b[i], err = strconv.Atoi(s)
if err != nil {
panic(err)
}
}
fmt.Println(b)
}
[11 22 33]
fn main() {
let a: Vec<&str> = vec!["11", "-22", "33"];
let b: Vec<i64> = a.iter().map(|x| x.parse::<i64>().unwrap()).collect();
println!("{:?}", b);
}
[11, -22, 33]
259. Split on several separators
Build list parts consisting of substrings of input string s, separated by any of the characters ',' (comma), '-' (dash), '_' (underscore).
在几个分隔符上拆分
package main
import (
"fmt"
"regexp"
)
func main() {
s := "2021-03-11,linux_amd64"
re := regexp.MustCompile("[,\\-_]")
parts := re.Split(s, -1)
fmt.Printf("%q", parts)
}
["2021" "03" "11" "linux" "amd64"]
fn main() {
let s = "2021-03-11,linux_amd64";
let parts: Vec<_> = s.split(&[',', '-', '_'][..]).collect();
println!("{:?}", parts);
}
["2021", "03", "11", "linux", "amd64"]
266. Repeating string
Assign to string s the value of string v, repeated n times and write it out.
E.g. v="abc", n=5 ⇒ s="abcabcabcabcabc"
重复字符串
package main
import (
"fmt"
"strings"
)
func main() {
v := "abc"
n := 5
s := strings.Repeat(v, n)
fmt.Println(s)
}
abcabcabcabcabc
fn main() {
let v = "abc";
let n = 5;
let s = v.repeat(n);
println!("{}", s);
}
abcabcabcabcabc
本文由 mdnice 多平台发布
相关文章:
Rust vs Go:常用语法对比(十三)
题图来自 Go vs. Rust: The Ultimate Performance Battle 241. Yield priority to other threads Explicitly decrease the priority of the current process, so that other execution threads have a better chance to execute now. Then resume normal execution and call f…...
【【51单片机DA转换模块】】
爆改直流电机,DA转换器 main.c #include <REGX52.H> #include "Delay.h" #include "Timer0.h"sbit DAP2^1;unsigned char Counter,Compare; //计数值和比较值,用于输出PWM unsigned char i;void main() {Timer0_Init();whil…...
[SQL挖掘机] - 字符串函数 - substring
介绍: substring函数是在mysql中用于提取字符串的一种函数。它接受一个字符串作为输入,并返回从该字符串中指定位置开始的一部分子串。substring函数可以用于获取字符串中的特定字符或子串,以便进行进一步的处理或分析。 用法: 下面是substring函数的…...
第一百一十六天学习记录:C++提高:STL-string(黑马教学视频)
string基本概念 string是C风格的字符串,而string本质上是一个类 string和char区别 1、char是一个指针 2、string是一个类,类内部封装了char*,管理这个字符串,是一个char型的容器。 特点: string类内部封装了很多成员方…...
Meta-Transformer 多模态学习的统一框架
Meta-Transformer是一个用于多模态学习的新框架,用来处理和关联来自多种模态的信息,如自然语言、图像、点云、音频、视频、时间序列和表格数据,虽然各种数据之间存在固有的差距,但是Meta-Transformer利用冻结编码器从共享标记空间…...
tinkerCAD案例:24.Tinkercad 中的自定义字体
tinkerCAD案例:24.Tinkercad 中的自定义字体 原文 Tinkercad Projects Tinkercad has a fun shape in the Shape Generators section that allows you to upload your own font in SVG format and use it in your designs. I’ve used it for a variety of desi…...
list与流迭代器stream_iterator
运行代码: //list与流迭代器 #include"std_lib_facilities.h" //声明Item类 struct Item {string name;int iid;double value;Item():name(" "),iid(0),value(0.0){}Item(string ss,int ii,double vv):name(ss),iid(ii),value(vv){}friend ist…...
九耶:冯·诺伊曼体系
冯诺伊曼体系(Von Neumann architecture)是一种计算机体系结构,它由匈牙利数学家冯诺伊曼于1945年提出。冯诺伊曼体系是现代计算机体系结构的基础,几乎所有的通用计算机都采用了这种体系结构。 冯诺伊曼体系的核心思想是将计算机硬…...
探索UCI心脏病数据:利用R语言和h2o深度学习构建预测模型
一、引言 随着机器学习模型在实际应用中的广泛应用,人们对于模型的解释性和可理解性日益关注。可解释性机器学习是指能够清晰、透明地解释机器学习模型决策过程的一种方法和技术。在许多领域中,如医疗诊断、金融风险评估和自动驾驶等,解释模型…...
基于 moleculer 微服务架构的智能低代码PaaS 平台源码 可视化开发
低代码开发平台源码 低代码管理系统PaaS 平台 无需代码或通过少量代码就可以快速生成应用程序的开发平台。 本套低代码管理后台可以支持多种企业应用场景,包括但不限于CRM、ERP、OA、BI、IoT、大数据等。无论是传统企业还是新兴企业,都可以使用管理后台…...
xrdp登录显示白屏且红色叉
如上图所示,xrdp登录出现了红色叉加白屏,这是因为不正常关闭导致,解决方法其实挺简单的 #进入/usr/tmp cd /usr/tmp #删除对应用户的kdecache-** 文件(我这里使用的是kde桌面),例如删除ywj用户对应的文件 …...
Docker安装 Mysql 8.x 版本
文章目录 Docker安装 Mysql 8.0.22Mysql 创建账号并授权Mysql 数据迁移同版本数据迁移跨版本数据迁移 Mysql 5.x 版本与 Mysql 8.x版本是两个大版本,这里演示安装Mysql 8.x版本 Docker安装 Mysql 8.0.22 # 下载mysql $ docker pull mysql 默认安装最新…...
【数理知识】刚体 rigid body 及刚体的运动
文章目录 1 刚体2 刚体一般运动1 平移运动2 旋转运动 Ref 1 刚体 刚体是指在运动中和受力作用后,形状和大小不变,而且内部各点的相对位置不变的物体。绝对刚体实际上是不存在的,只是一种理想模型,因为任何物体在受力作用后&#…...
【UE5 多人联机教程】03-创建游戏
效果 步骤 打开“UMG_MainMenu”,增加创建房间按钮的点击事件 添加如下节点 其中,“FUNL Fast Create Widget”是插件自带的函数节点,内容如下: “创建会话”节点指游戏成功创建一个会话后,游戏的其他实例即可发现&am…...
【时间序列预测 】M4
【时间序列预测 】M4 论文题目:The M4 Competition: 100,000 time series and 61 forecasting methods 中文题目: 论文链接: 论文代码: 论文团队: 发表时间: DOI: 引用: 引用数: 摘要…...
SpringCloud微服务实战——搭建企业级开发框架(五十三):微信小程序授权登录增加多租户可配置界面
GitEgg框架集成weixin-java-miniapp工具包以实现微信小程序相关接口调用功能,weixin-java-miniapp底层支持多租户扩展。每个小程序都有唯一的appid,weixin-java-miniapp的多租户实现并不是以租户标识TenantId来区分的,而是在接口调用时&#…...
Stability AI推出Stable Diffusion XL 1.0,文本到图像模型
Stability AI宣布推出Stable Diffusion XL 1.0,这是一个文本到图像的模型,该公司将其描述为迄今为止“最先进的”版本。 Stability AI表示,SDXL 1.0能生成更加鲜明准确的色彩,在对比度、光线和阴影方面做了增强,可生成…...
B076-项目实战--宠物上下架 展示 领养 收购订单
目录 上下架功能提供后台宠物列表实现 前台展示前台宠物列表和详情展示店铺展示 领养分析前台后端PetControllerPetServiceImpl 订单需求分析可能产生订单的模块订单模块额外功能 订单设计表设计流程设计 集成基础代码收购订单创建订单前端后端 上下架功能提供 后台宠物列表实…...
【iOS】—— 持久化
文章目录 数据持久化的目的iOS中数据持久化方案数据持久化方式分类内存缓存磁盘缓存 沙盒机制获取应用程序的沙盒路径沙盒目录的获取方式 持久化数据存储方式XML属性列表Preferences偏好设置(UserDefaults)数据库存储什么是序列化和反序列化,…...
教程 - 在 Vue3+Ts 中引入 CesiumJS 的最佳实践@2023
1. 本篇适用范围与目的 1.1. 适用范围 严格使用 Vue3 TypeScript 的前端项目,包管理器默认使用 pnpm 构建工具使用 Vite4 使用原生 CesiumJS 依赖做应用开发 客户端渲染,因为我不太熟悉 Vue 的服务端渲染,有本篇的介绍后,熟悉…...
【机器视觉】单目测距——运动结构恢复
ps:图是随便找的,为了凑个封面 前言 在前面对光流法进行进一步改进,希望将2D光流推广至3D场景流时,发现2D转3D过程中存在尺度歧义问题,需要补全摄像头拍摄图像中缺失的深度信息,否则解空间不收敛…...
django filter 统计数量 按属性去重
在Django中,如果你想要根据某个属性对查询集进行去重并统计数量,你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求: 方法1:使用annotate()和Count 假设你有一个模型Item,并且你想…...
全志A40i android7.1 调试信息打印串口由uart0改为uart3
一,概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本:2014.07; Kernel版本:Linux-3.10; 二,Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01),并让boo…...
算法岗面试经验分享-大模型篇
文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer (1)资源 论文&a…...
GruntJS-前端自动化任务运行器从入门到实战
Grunt 完全指南:从入门到实战 一、Grunt 是什么? Grunt是一个基于 Node.js 的前端自动化任务运行器,主要用于自动化执行项目开发中重复性高的任务,例如文件压缩、代码编译、语法检查、单元测试、文件合并等。通过配置简洁的任务…...
【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)
本项目是基于 STM32F103C8T6 微控制器的 SPWM(正弦脉宽调制)电源模块,能够生成可调频率和幅值的正弦波交流电源输出。该项目适用于逆变器、UPS电源、变频器等应用场景。 供电电源 输入电压采集 上图为本设计的电源电路,图中 D1 为二极管, 其目的是防止正负极电源反接, …...
接口自动化测试:HttpRunner基础
相关文档 HttpRunner V3.x中文文档 HttpRunner 用户指南 使用HttpRunner 3.x实现接口自动化测试 HttpRunner介绍 HttpRunner 是一个开源的 API 测试工具,支持 HTTP(S)/HTTP2/WebSocket/RPC 等网络协议,涵盖接口测试、性能测试、数字体验监测等测试类型…...
【Android】Android 开发 ADB 常用指令
查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现企业微信功能
1. 开发环境准备 安装DevEco Studio 3.1: 从华为开发者官网下载最新版DevEco Studio安装HarmonyOS 5.0 SDK 项目配置: // module.json5 {"module": {"requestPermissions": [{"name": "ohos.permis…...
【前端异常】JavaScript错误处理:分析 Uncaught (in promise) error
在前端开发中,JavaScript 异常是不可避免的。随着现代前端应用越来越多地使用异步操作(如 Promise、async/await 等),开发者常常会遇到 Uncaught (in promise) error 错误。这个错误是由于未正确处理 Promise 的拒绝(r…...
