51. Check if map contains key
Determine whether map m contains an entry for key k
检查map是否有某个key
package main import ( "fmt" ) func main() { m := map[string]int{ "uno": 1, "dos": 2, "tres": 3, } k := "cinco" _, ok := m[k] fmt.Printf("m contains key %q: %v\n", k, ok) k = "tres" _, ok = m[k] fmt.Printf("m contains key %q: %v\n", k, ok) }
输出
m contains key "cinco": false m contains key "tres": true
use std::collections::HashMap; fn main() { let mut m = HashMap::new(); m.insert(1, "a"); m.insert(2, "b"); let k = 2; let hit = m.contains_key(&k); println!("{:?}", hit); }
52. Check if map contains value
检查map中是否有某个值
package main import ( "fmt" ) func containsValue(m map[K]T, v T) bool { for _, x := range m { if x == v { return true } } return false } // Arbitrary types for K, T. type K string type T int func main() { m := map[K]T{ "uno": 1, "dos": 2, "tres": 3, } var v T = 5 ok := containsValue(m, v) fmt.Printf("m contains value %d: %v\n", v, ok) v = 3 ok = containsValue(m, v) fmt.Printf("m contains value %d: %v\n", v, ok) }
输出
m contains value 5: false m contains value 3: true
use std::collections::BTreeMap; fn main() { let mut m = BTreeMap::new(); m.insert(11, "one"); m.insert(22, "twenty-two"); { let v = "eight"; let does_contain = m.values().any(|&val| *val == *v); println!("{:?}", does_contain); } { let v = "twenty-two"; let does_contain = m.values().any(|&val| *val == *v); println!("{:?}", does_contain); } }
53. Join a list of strings
字符串连接
package main import ( "fmt" "strings" ) func main() { x := []string{"xxx", "bbb", "aaa"} y := strings.Join(x, "&") fmt.Println(y) }
输出
xxx&bbb&aaa
fn main() { let x = vec!["Lorem", "ipsum", "dolor", "sit", "amet"]; let y = x.join(", "); println!("{}", y); }
输出
Lorem, ipsum, dolor, sit, amet
54. Compute sum of integers
计算整数之和
package main import "fmt" func main() { x := []int{1, 2, 3} s := 0 for _, v := range x { s += v } fmt.Println(s) }
输出
6
fn main() { let x: Vec<usize> = (0..=10_000).collect(); eprintln!("Sum of 0-10,000 = {}", x.iter().sum::<usize>()) }
输出
Sum of 0-10,000 = 50005000
55. Convert integer to string
将整数转换为字符串
package main import ( "fmt" "strconv" ) func main() { var i int = 1234 s := strconv.Itoa(i) fmt.Println(s) }
输出
1234
or
package main import ( "fmt" "strconv" ) func main() { var i int64 = 1234 s := strconv.FormatInt(i, 10) fmt.Println(s) }
输出
1234
or
package main import "fmt" import "math/big" func main() { var i int = 1234 s := fmt.Sprintf("%d", i) fmt.Println(s) var j int = 5678 s = fmt.Sprintf("%d", j) fmt.Println(s) var k *big.Int = big.NewInt(90123456) s = fmt.Sprintf("%d", k) fmt.Println(s) }
输出
1234 5678 90123456
fn main() { let i = 123; let s = i.to_string(); println!("{}", s); }
输出
123
or
fn main() { let i = 123; let s = format!("{}", i); println!("{}", s); }
输出
123
56. Launch 1000 parallel tasks and wait for completion
Fork-join : launch the concurrent execution of procedure f with parameter i from 1 to 1000. Tasks are independent and f(i) doesn't return any value. Tasks need not run all at the same time, so you may use a pool. Wait for the completion of the 1000 tasks and then print "Finished".
创建1000个并行任务,并等待其完成
package main import ( "fmt" "math/rand" "sync" "time" ) func f(i int) { d := rand.Int() % 10000 time.Sleep(time.Duration(d)) fmt.Printf("Hello %v\n", i) } func main() { var wg sync.WaitGroup wg.Add(1000) for i := 1; i <= 1000; i++ { go func(i int) { f(i) wg.Done() }(i) } wg.Wait() fmt.Println("Finished") }
输出
Hello 741 Hello 651 Hello 49 ...(共计1000个) Hello xxx
use std::thread; fn f(i: i32) { i + 1; } fn main() { let threads: Vec<_> = (0..10).map(|i| thread::spawn(move || f(i))).collect(); for t in threads { t.join(); } }
57. Filter list
Create list y containing items from list x satisfying predicate p. Respect original ordering. Don't modify x in-place.
过滤list中的值
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 } y := make([]T, 0, len(x)) for _, v := range x { if p(v) { y = append(y, v) } } fmt.Println(y) }
or
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 } n := 0 for _, v := range x { if p(v) { n++ } } y := make([]T, 0, n) for _, v := range x { if p(v) { y = append(y, v) } } fmt.Println(y) }
输出
[2 4 6 8 10]
fn main() { let x = vec![1, 2, 3, 4, 5, 6]; let y: Vec<_> = x.iter() .filter(|&x| x % 2 == 0) .collect(); println!("{:?}", y); }
输出
[2, 4, 6]
58. Extract file content to a string
提取字符串的文件内容
package main import "fmt" import "io/ioutil" func main() { f := "data.txt" b, err := ioutil.ReadFile(f) if err != nil { panic(err) } lines := string(b) fmt.Println(lines) } // Create file in fake FS of the Playground. init is executed before main. func init() { err := ioutil.WriteFile("data.txt", []byte(`Un Dos Tres`), 0644) if err != nil { panic(err) } }
输出
Un Dos Tres
use std::fs::File; use std::io::prelude::*; fn main() -> Result<(), ()> { let f = "Cargo.toml"; let mut file = File::open(f).expect("Can't open file."); let mut lines = String::new(); file.read_to_string(&mut lines) .expect("Can't read file contents."); println!("{}", lines); Ok(()) }
or
use std::fs; fn main() { let f = "Cargo.toml"; let lines = fs::read_to_string(f).expect("Can't read file."); println!("{}", lines); }
59. Write to standard error stream
Print the message "x is negative" to standard error (stderr), with integer x value substitution (e.g. "-2 is negative").
写入标准错误流
package main import ( "fmt" "os" ) func main() { x := -2 fmt.Fprintln(os.Stderr, x, "is negative") }
输出
-2 is negative
fn main() { let x = -3; eprintln!("{} is negative", x); }
输出
-3 is negative
60. Read command line argument
读取命令行参数
import "os" x := os.Args[1]
use std::env; fn main() { let first_arg = env::args().skip(1).next(); let fallback = "".to_owned(); let x = first_arg.unwrap_or(fallback); println!("{:?}", x); }
输出