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

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

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.
}
extern crate time;
let d = time::now();

or

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

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)
}
fn main() {
    let x = "lorem ipsum dolor lorem ipsum";
    let y = "lorem";
    let z = "LOREM";
    let x2 = x.replace(&y, &z);
    println!("{}", x2);
}

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)
}
extern crate num;
use num::bigint::ToBigInt;
fn main() {
    let a = 3.to_bigint().unwrap();
    let x = num::pow(a, 247);
    println!("{}", x)
}

65. Format decimal number

格式化十进制数

package main
import "fmt"
func main() {
  x := 0.15625
  s := fmt.Sprintf("%.1f%%", 100.0*x)
  fmt.Println(s)
}
fn main() {
    let x = 0.15625f64;
    let s = format!("{:.1}%", 100.0 * x);
    println!("{}", s);
}

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)
}
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(4, 2)
  fmt.Println(z)
  z.Binomial(133, 71)
  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));
}

68. Create a bitset

创建位集合

package main
import (
  "fmt"
  "math/big"
)
func main() {
  var x *big.Int = new(big.Int)
  x.SetBit(x, 42, 1)
  for _, y := range []int{13, 42} {
    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{13, 42} {
    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{13, 42} {
    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);
}

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())
}

or

package main
import (
  "fmt"
  "math/rand"
)
func main() {
  var s int64 = 42
  r := rand.New(rand.NewSource(s))
  fmt.Println(r.Int())
}
use rand::{Rng, SeedableRng, rngs::StdRng};
fn main() {
    let s = 32;
    let mut rng = StdRng::seed_from_u64(s);
    println!("{:?}", rng.gen::<f32>());
}

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))
}

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))
}
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>());
}
目录
相关文章
|
1月前
|
Rust API
【Rust学习】09_方法语法
结构体让你可以创建出在你的领域中有意义的自定义类型。通过结构体,我们可以将相关联的数据片段联系起来并命名它们,这样可以使得代码更加清晰。在 impl 块中,你可以定义与你的类型相关联的函数,而方法是一种相关联的函数,允许您指定结构体的实例具有的行为。 但是结构体并不是创建自定义类型的唯一方式:让我们转向 Rust 的 enum 功能,将另一个工具添加到你的工具箱中。
17 0
|
2月前
|
Java 编译器 Go
Go to Learn Go之基础语法
Go to Learn Go之基础语法
18 0
|
3月前
|
Rust 安全 编译器
30天拿下Rust之语法大全
Rust是一种系统级编程语言,以其独特的所有权系统和内存安全性受到开发者青睐。本文从基本数据类型入手,介绍了标量类型如整数、浮点数、布尔值及字符,复合类型如元组、数组和结构体等。此外,还探讨了变量与常量的声明与使用,条件判断与循环语句的语法,以及函数定义与调用的方法。文章通过示例代码展示了如何使用Rust编写简洁高效的程序,并简要介绍了注释与宏的概念,为读者快速掌握这门语言提供了实用指南。欲获取最新文章或交流技术问题,请关注微信公众号“希望睿智”。
49 1
|
2月前
|
Rust Linux Go
Rust/Go语言学习
Rust/Go语言学习
|
5月前
|
存储 Java Go
|
4月前
|
Rust
Rust 中使用 :: 这种语法的几种情况
Rust 中使用 :: 这种语法的几种情况
|
5月前
|
Rust
Rust的if let语法:更简洁的模式匹配
Rust的if let语法:更简洁的模式匹配
|
5月前
|
编译器 Go 开发者
|
5月前
|
Go
go基础语法结束篇 ——函数与方法
go基础语法结束篇 ——函数与方法
|
5月前
|
编译器 Go 数据安全/隐私保护
go语言入门之路——基础语法
go语言入门之路——基础语法