Rust vs Go:常用语法对比(四)


alt

题图来自 Go vs. Rust performance comparison: The basics


61. Get current date

获取当前时间

package main

import (
 "fmt"
 "time"
)

func main() {
 d := time.Now()
 fmt.Println("Now is", d)
 // The Playground has a special sandbox, so you may get a Time value fixed in the past.
}

Now is 2009-11-10 23:00:00 +0000 UTC m=+0.000000001


extern crate time;
let d = time::now();

or

use std::time::SystemTime;

fn main() {
    let d = SystemTime::now();
    println!("{:?}", d);
}

SystemTime { tv_sec: 1526318418, tv_nsec: 699329521 }


62. Find substring position

字符串查找

查找子字符串位置

package main

import (
 "fmt"
 "strings"
)

func main() {
 x := "été chaud"

 {
  y := "chaud"
  i := strings.Index(x, y)
  fmt.Println(i)
 }

 {
  y := "froid"
  i := strings.Index(x, y)
  fmt.Println(i)
 }
}

i is the byte index of y in x, not the character (rune) index. i will be -1 if y is not found in x.

6
-1

fn main() {
    let x = "été chaud";
    
    let y = "chaud";
    let i = x.find(y);
    println!("{:?}", i);
    
    let y = "froid";
    let i = x.find(y);
    println!("{:?}", i);
}
Some(6)
None

63. Replace fragment of a string

替换字符串片段

package main

import (
 "fmt"
 "strings"
)

func main() {
 x := "oink oink oink"
 y := "oink"
 z := "moo"
 x2 := strings.Replace(x, y, z, -1)
 fmt.Println(x2)
}

moo moo moo


fn main() {
    let x = "lorem ipsum dolor lorem ipsum";
    let y = "lorem";
    let z = "LOREM";

    let x2 = x.replace(&y, &z);
    
    println!("{}", x2);
}

LOREM ipsum dolor LOREM ipsum


64. Big integer : value 3 power 247

超大整数

package main

import "fmt"
import "math/big"

func main() {
 x := new(big.Int)
 x.Exp(big.NewInt(3), big.NewInt(247), nil)
 fmt.Println(x)
}

7062361041362837614435796717454722507454089864783271756927542774477268334591598635421519542453366332460075473278915787


extern crate num;
use num::bigint::ToBigInt;

fn main() {
    let a = 3.to_bigint().unwrap();
    let x = num::pow(a, 247);
    println!("{}", x)
}

7062361041362837614435796717454722507454089864783271756927542774477268334591598635421519542453366332460075473278915787


65. Format decimal number

格式化十进制数

package main

import "fmt"

func main() {
 x := 0.15625
 s := fmt.Sprintf("%.1f%%"100.0*x)
 fmt.Println(s)
}

15.6%


fn main() {
    let x = 0.15625f64;
    let s = format!("{:.1}%"100.0 * x);
    
    println!("{}", s);
}

15.6%


66. Big integer exponentiation

大整数幂运算

package main

import "fmt"
import "math/big"

func exp(x *big.Int, n int) *big.Int {
 nb := big.NewInt(int64(n))
 var z big.Int
 z.Exp(x, nb, nil)
 return &z
}

func main() {
 x := big.NewInt(3)
 n := 5
 z := exp(x, n)
 fmt.Println(z)
}

243


extern crate num;

use num::bigint::BigInt;

fn main() {
    let x = BigInt::parse_bytes(b"600000000000"10).unwrap();
    let n = 42%

67. Binomial coefficient "n choose k"

Calculate binom(n, k) = n! / (k! * (n-k)!). Use an integer type able to handle huge numbers.

二项式系数“n选择k”

package main

import (
 "fmt"
 "math/big"
)

func main() {
 z := new(big.Int)
 
 z.Binomial(42)
 fmt.Println(z)
 
 z.Binomial(13371)
 fmt.Println(z)
}

6
555687036928510235891585199545206017600

extern crate num;

use num::bigint::BigInt;
use num::bigint::ToBigInt;
use num::traits::One;

fn binom(n: u64, k: u64) -> BigInt {
    let mut res = BigInt::one();
    for i in 0..k {
        res = (res * (n - i).to_bigint().unwrap()) /
              (i + 1).to_bigint().unwrap();
    }
    res
}

fn main() {
    let n = 133;
    let k = 71;

    println!("{}", binom(n, k));
}

555687036928510235891585199545206017600


68. Create a bitset

创建位集合

package main

import (
 "fmt"
 "math/big"
)

func main() {
 var x *big.Int = new(big.Int)

 x.SetBit(x, 421)

 for _, y := range []int{1342} {
  fmt.Println("x has bit", y, "set to", x.Bit(y))
 }
}
x has bit 13 set to 0
x has bit 42 set to 1

or

package main

import (
 "fmt"
)

const n = 1024

func main() {
 x := make([]bool, n)

 x[42] = true

 for _, y := range []int{1342} {
  fmt.Println("x has bit", y, "set to", x[y])
 }
}
x has bit 13 set to false
x has bit 42 set to true

or

package main

import (
 "fmt"
)

func main() {
 const n = 1024

 x := NewBitset(n)

 x.SetBit(13)
 x.SetBit(42)
 x.ClearBit(13)

 for _, y := range []int{1342} {
  fmt.Println("x has bit", y, "set to", x.GetBit(y))
 }
}

type Bitset []uint64

func NewBitset(n int) Bitset {
 return make(Bitset, (n+63)/64)
}

func (b Bitset) GetBit(index int) bool {
 pos := index / 64
 j := index % 64
 return (b[pos] & (uint64(1) << j)) != 0
}

func (b Bitset) SetBit(index int) {
 pos := index / 64
 j := index % 64
 b[pos] |= (uint64(1) << j)
}

func (b Bitset) ClearBit(index int) {
 pos := index / 64
 j := index % 64
 b[pos] ^= (uint64(1) << j)
}

x has bit 13 set to false
x has bit 42 set to true

fn main() {
    let n = 20;

    let mut x = vec![false; n];

    x[3] = true;
    println!("{:?}", x);
}

[false, false, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false]


69. Seed random generator

Use seed s to initialize a random generator.

If s is constant, the generator output will be the same each time the program runs. If s is based on the current value of the system clock, the generator output will be different each time.

随机种子生成器

package main

import (
 "fmt"
 "math/rand"
)

func main() {
 var s int64 = 42
 rand.Seed(s)
 fmt.Println(rand.Int())
}

3440579354231278675

or

package main

import (
 "fmt"
 "math/rand"
)

func main() {
 var s int64 = 42
 r := rand.New(rand.NewSource(s))
 fmt.Println(r.Int())
}

3440579354231278675


use rand::{Rng, SeedableRng, rngs::StdRng};

fn main() {
    let s = 32;
    let mut rng = StdRng::seed_from_u64(s);
    
    println!("{:?}", rng.gen::<f32>());
}

0.35038823


70. Use clock as random generator seed

Get the current datetime and provide it as a seed to a random generator. The generator sequence will be different at each run.

使用时钟作为随机生成器的种子

package main

import (
 "fmt"
 "math/rand"
 "time"
)

func main() {
 rand.Seed(time.Now().UnixNano())
 // Well, the playground date is actually fixed in the past, and the
 // output is cached.
 // But if you run this on your workstation, the output will vary.
 fmt.Println(rand.Intn(999))
}

524

or

package main

import (
 "fmt"
 "math/rand"
 "time"
)

func main() {
 r := rand.New(rand.NewSource(time.Now().UnixNano()))
 // Well, the playground date is actually fixed in the past, and the
 // output is cached.
 // But if you run this on your workstation, the output will vary.
 fmt.Println(r.Intn(999))
}

524


use rand::{Rng, SeedableRng, rngs::StdRng};
use std::time::SystemTime;

fn main() {
    let d = SystemTime::now()
        .duration_since(SystemTime::UNIX_EPOCH)
        .expect("Duration since UNIX_EPOCH failed");
    let mut rng = StdRng::seed_from_u64(d.as_secs());
    
    println!("{:?}", rng.gen::<f32>());
}

0.7326781


71. Echo program implementation

Basic implementation of the Echo program: Print all arguments except the program name, separated by space, followed by newline.
The idiom demonstrates how to skip the first argument if necessary, concatenate arguments as strings, append newline and print it to stdout.

实现 Echo 程序

package main
import "fmt"
import "os"
import "strings"
func main() {
    fmt.Println(strings.Join(os.Args[1:], " "))
}

use std::env;

fn main() {
    println!("{}", env::args().skip(1).collect::<Vec<_>>().join(" "));
}

or

use itertools::Itertools;
println!("{}", std::env::args().skip(1).format(" "));

74. Compute GCD

Compute the greatest common divisor x of big integers a and b. Use an integer type able to handle huge numbers.

计算大整数a和b的最大公约数x。使用能够处理大数的整数类型。

package main

import "fmt"
import "math/big"

func main() {
 a, b, x := new(big.Int), new(big.Int), new(big.Int)
 a.SetString("6000000000000"10)
 b.SetString("9000000000000"10)
 x.GCD(nilnil, a, b)
 fmt.Println(x)
}

3000000000000


extern crate num;

use num::Integer;
use num::bigint::BigInt;

fn main() {
    let a = BigInt::parse_bytes(b"6000000000000"10).unwrap();
    let b = BigInt::parse_bytes(b"9000000000000"10).unwrap();
    
    let x = a.gcd(&b);
 
    println!("{}", x);
}

3000000000000


75. Compute LCM

计算大整数a和b的最小公倍数x。使用能够处理大数的整数类型。

Compute the least common multiple x of big integers a and b. Use an integer type able to handle huge numbers.

package main

import "fmt"
import "math/big"

func main() {
 a, b, gcd, x := new(big.Int), new(big.Int), new(big.Int), new(big.Int)
 a.SetString("6000000000000"10)
 b.SetString("9000000000000"10)
 gcd.GCD(nilnil, a, b)
 x.Div(a, gcd).Mul(x, b)
 fmt.Println(x)
}

18000000000000


extern crate num;

use num::bigint::BigInt;
use num::Integer;

fn main() {
    let a = BigInt::parse_bytes(b"6000000000000"10).unwrap();
    let b = BigInt::parse_bytes(b"9000000000000"10).unwrap();
    let x = a.lcm(&b);
    println!("x = {}", x);
}

x = 18000000000000


76. Binary digits from an integer

Create the string s of integer x written in base 2.
E.g. 13 -> "1101"

将十进制整数转换为二进制数字

package main

import "fmt"
import "strconv"

func main() {
 x := int64(13)
 s := strconv.FormatInt(x, 2)

 fmt.Println(s)
}

1101

or

package main

import (
 "fmt"
 "math/big"
)

func main() {
 x := big.NewInt(13)
 s := fmt.Sprintf("%b", x)

 fmt.Println(s)
}

1101


fn main() {
    let x = 13;
    let s = format!("{:b}", x);
    
    println!("{}", s);
}

1101


77. SComplex number

Declare a complex x and initialize it with value (3i - 2). Then multiply it by i.

复数

package main

import (
 "fmt"
 "reflect"
)

func main() {
 x := 3i - 2
 x *= 1i

 fmt.Println(x)
 fmt.Print(reflect.TypeOf(x))
}

(-3-2i)
complex128

extern crate num;
use num::Complex;

fn main() {
    let mut x = Complex::new(-23);
    x *= Complex::i();
    println!("{}", x);
}

-3-2i


78. "do while" loop

Execute a block once, then execute it again as long as boolean condition c is true.

循环执行

package main

import (
 "fmt"
 "math/rand"
)

func main() {
 for {
  x := rollDice()
  fmt.Println("Got", x)
  if x == 3 {
   break
  }

 }
}

func rollDice() int {
 return 1 + rand.Intn(6)
}

Go has no do while loop, use the for loop, instead.

Got 6
Got 4
Got 6
Got 6
Got 2
Got 1
Got 2
Got 3

or

package main

import (
 "fmt"
 "math/rand"
)

func main() {
 for done := false; !done; {
  x := rollDice()
  fmt.Println("Got", x)
  done = x == 3
 }
}

func rollDice() int {
 return 1 + rand.Intn(6)
}
Got 6
Got 4
Got 6
Got 6
Got 2
Got 1
Got 2
Got 3

loop {
    doStuff();
    if !c { break; }
}

Rust has no do-while loop with syntax sugar. Use loop and break.


79. Convert integer to floating point number

Declare floating point number y and initialize it with the value of integer x .

整型转浮点型

声明浮点数y并用整数x的值初始化它。

package main

import (
 "fmt"
 "reflect"
)

func main() {
 x := 5
 y := float64(x)

 fmt.Println(y)
 fmt.Printf("%.2f\n", y)
 fmt.Println(reflect.TypeOf(y))
}
5
5.00
float64

fn main() {
    let i = 5;
    let f = i as f64;
    
    println!("int {:?}, float {:?}", i, f);
}
int 5, float 5.0

80. Truncate floating point number to integer

Declare integer y and initialize it with the value of floating point number x . Ignore non-integer digits of x . Make sure to truncate towards zero: a negative x must yield the closest greater integer (not lesser).

浮点型转整型

package main

import "fmt"

func main() {
 a := -6.4
 b := 6.4
 c := 6.6
 fmt.Println(int(a))
 fmt.Println(int(b))
 fmt.Println(int(c))
}
-6
6
6

fn main() {
    let x = 41.59999999f64;
    let y = x as i32;
    println!("{}", y);
}

41


本文由 mdnice 多平台发布

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/5579.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

多目标灰狼算法(MOGWO)的Matlab代码详细注释及难点解释

目录 一、外部种群Archive机制 二、领导者选择机制 三、多目标灰狼算法运行步骤 四、MOGWO的Matlab部分代码详细注释 五、MOGWO算法难点解释 5.1 网格与膨胀因子 5.2 轮盘赌方法选择每个超立方体概率 为了将灰狼算法应用于多目标优化问题,在灰狼算法中引入外部种群Archi…

Vue第六篇:电商网站图片放大镜功能

本文参考&#xff1a;https://blog.csdn.net/liushi21/article/details/127497487 效果如下&#xff1a; 功能实现分解如下&#xff1a; &#xff08;1&#xff09;商品图区域&#xff1a;主要是浏览图片&#xff0c;根据图片的url显示图片。当鼠标离开此区域时"放大镜区…

ES6解构对象、数组、函数传参

目录 1.对象解构 2.对象解构的细节处理 2.1.解构的值对象中不存在时 2.2.给予解构值默认参数 2.3.非同名属性解构 3.数组解构 3.1基础解构语法 3.2数组嵌套解构 4.函数解构传参 5.解构小练习 在ES6的新语法中新增了解构的方法&#xff0c;它可以让我们很方便的从数组或…

每天五分钟机器学习:多项式非线性回归模型

本文重点 在前面的课程中,我们学习了线性回归模型和非线性回归模型的区别和联系。多项式非线性回归模型是一种用于拟合非线性数据的回归模型。与线性回归模型不同,多项式非线性回归模型可以通过增加多项式的次数来适应更复杂的数据模式。在本文中,我们将介绍多项式非线性回…

关于Arduino IDE库文件存放路径问题总结(双版本)

在开发过程中,如果不注意,库文件存放路径很乱,如果在转移系统环境时,容易忘记备份。编译过程中出现多个可用引用包的位置,为了解决这些问题,要明白各文件夹的默认路径在哪,区别在哪,如有了解不对的地方请指正。 IDE安装目录(默认C盘,自定义可以其他盘符下)IDE升级可…

IDEA如何打包springboot成jar包,并运行、停止、重启,本地依赖不能打包怎么办

1、将springboot项目打包成jar 第一步 这里要注意依赖的包的导入&#xff0c;有pom.xml中网络依赖导入&#xff0c;有的包是本地依赖导入&#xff0c;本地依赖的包只需在pom.xml加入一下代码即可&#xff01; <dependency><groupId>jacob</groupId>//名称…

eclipse中经常遇到的maven相关的问题

maven工程依赖的jar包无法部署到tomcat中 右键maven工程&#xff0c;选择“属性” 将工程在tomcat重新发布即可。 2、Update Project or use Quick Fix maven工程总是提示更新&#xff0c;一更新java版本又回到1.5 在pom.xml添加如下&#xff1a; <build><finalN…

rabbitmq是什么?rabbitmq安装、原理、部署

rabbitmq是什么&#xff1f; MQ的全称是Messagee Queue&#xff0c;因为消息的队列是队列&#xff0c;所以遵循FIFO 先进先出的原则是上下游传递信息的跨过程通信机制。 RabbitMQ是一套开源&#xff08;MPL&#xff09;新闻队列服务软件由 LShift 提供的一个 Advanced Messag…

量子计算机操作系统介绍

下载&#xff1a;https://m.originqc.com.cn/zh 为量子计算编程而生的一站式学习与开发平台&#xff0c;提供量子编程开发环境&#xff0c;支持量子计算资源随时调用&#xff0c;支持量子应用打开即用。 产品特点 无需安装配置 PilotOS客户端集成量子编程开发环境所需的Pyt…

前端对后端路径的下载//流文件下载

1.前端对后端路径的下载 2.流文件下载

【git基本使用】

初识git 一、git安装 1.1 Linux-centos 如果你的的平台是centos&#xff0c;安装git相当简单&#xff0c;以我的centos7.6为例&#xff1a; ⾸先&#xff0c;你可以试着输⼊Git&#xff0c;看看系统有没有安装Git&#xff1a; git-bash: git: command not found 出现像上⾯…

MYSQL练习一答案

练习1答案 构建数据库 数据库 数据表 answer开头表为对应题号答案形成的数据表 表结构 表数据 答案&#xff1a; 1、查询商品库存等于50的所有商品&#xff0c;显示商品编号&#xff0c;商 品名称&#xff0c;商品售价&#xff0c;商品库存。 SQL语句 select good_no,good…

【树上操作】定长裁剪 CF1833 G

Problem - G - Codeforces 题意&#xff1a; 给定一棵n个节点的树&#xff0c;请你减掉一些边&#xff0c;使得剪掉后的每个树只有三个节点&#xff0c; 如果可以&#xff0c;第一行返回减掉边的数量&#xff0c;第二行返回减掉边的编号&#xff1b;如果无解&#xff0c;输出…

Redis的内存回收与内存淘汰策略

对于redis这样的内存型数据库而言&#xff0c;如何删除已过期的数据以及如何在内存满时回收内存是一项很重要的工作。 常见的redis内存回收的工作主要分为两个方面&#xff1a; 清理过期的key在内存不足时回收到足够的内存用以存储新的key 清理过期的key 我们很少在redis中…

Cesium态势标绘专题-普通点(标绘+编辑)

标绘专题介绍:态势标绘专题介绍_总要学点什么的博客-CSDN博客 入口文件:Cesium态势标绘专题-入口_总要学点什么的博客-CSDN博客 辅助文件:Cesium态势标绘专题-辅助文件_总要学点什么的博客-CSDN博客 本专题没有废话,只有代码,代码中涉及到的引入文件方法,从上面三个链…

[golang gin框架] 40.Gin商城项目-微服务实战之Captcha验证码微服务

本次内容需要 gin框架基础知识, golang微服务基础知识才能更好理解 一.Captcha验证码功能引入 在前面,讲解了微服务的架构等,这里,来讲解前面商城项目的 Captcha验证码 微服务 ,captcha验证码功能在前台,后端 都要用到 ,可以把它 抽离出来 ,做成微服务功能 编辑 这个验证码功能…

《零基础入门学习Python》第063讲:论一只爬虫的自我修养11:Scrapy框架之初窥门径

上一节课我们好不容易装好了 Scrapy&#xff0c;今天我们就来学习如何用好它&#xff0c;有些同学可能会有些疑惑&#xff0c;既然我们懂得了Python编写爬虫的技巧&#xff0c;那要这个所谓的爬虫框架又有什么用呢&#xff1f;其实啊&#xff0c;你懂得Python写爬虫的代码&…

20 QTreeWidget控件

代码&#xff1a; //treeWidget树控件//1&#xff1a;设置头部标签 QStringList()匿名对象创建ui->treeWidget->setHeaderLabels(QStringList()<<"英雄"<<"英雄介绍");//2&#xff1a;设置itemQTreeWidgetItem * liItem new QTreeWidg…

Linux 系统中异常与中断

文章目录 异常与中断的关系中断的处理流程异常向量表Linux 系统对中断的处理ARM 处理器程序运行的过程程序被中断时&#xff0c;怎么保存现场Linux 系统对中断处理的演进Linux 对中断的扩展&#xff1a;硬件中断、软件中断硬件中断软件中断 中断处理原则&#xff1a;耗时中断的…

【面试题】万字总结MYSQL面试题

Yan-英杰的主页 悟已往之不谏 知来者之可追 C程序员&#xff0c;2024届电子信息研究生 目录 1、三大范式 2、DML 语句和 DDL 语句区别 3、主键和外键的区别 4、drop、delete、truncate 区别 5、基础架构 6、MyISAM 和 InnoDB 有什么区别&#xff1f; 7、推荐自增id作为…