計算機科学のブログ

関数(とその他の数学とコンピュータに関する予備知識) 入門 繰り返し処理について スライス、map、長さ、forとrange

行列プログラマー (Philip N. Klein(著)、松田 晃一(翻訳)、弓林 司(翻訳)、脇本 佑紀(翻訳)、中田 洋(翻訳)、齋藤 大吾(翻訳)、オライリー・ジャパン)の0章(関数(とその他の数学とコンピュータに関する予備知識))、0.5(ラボ: Python入門 - 集合、リスト、辞書、内包表記)、課題0.5.17、0.5.7(その他の繰り返し処理について)の課題0.5.18、0.5.19、0.5.20の解答をPythonではなくGoで求めてみる。

コード

package main

import "fmt"

// IntegerSet ...
type IntegerSet map[int]bool

// NewIntegerSet ...
func NewIntegerSet(ns []int) IntegerSet {
	t := map[int]bool{}
	for _, n := range ns {
		t[n] = true
	}
	return IntegerSet(t)
}

func main() {
	fmt.Println("課題0.5.17")
	nums := []int{1, 1}
	numSet := NewIntegerSet(nums)
	fmt.Println(len(nums), len(numSet))

	fmt.Println("課題0.5.18")
	nums = []int{}
	for i := 0; i < 100; i++ {
		if i%2 == 1 {
			nums = append(nums, i)
		}
	}
	fmt.Println(nums)

	fmt.Println("課題0.5.19")
	s := "ABCDE"
	type numString struct {
		num int
		s   string
	}
	ns := []numString{}
	for i, c := range s {
		ns = append(ns, numString{i, string(c)})
	}
	fmt.Println(ns)

	fmt.Println("課題0.5.20")
	nums1 := []int{10, 25, 40}
	nums2 := []int{1, 15, 20}
	nums = []int{}
	for i, n := range nums1 {
		nums = append(nums, n+nums2[i])
	}
	fmt.Println(nums)
}

入出力結果

% go run main.go
課題0.5.17
2 1
課題0.5.18
[1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41 43 45 47 49 51 53 55 57 59 61 63 65 67 69 71 73 75 77 79 81 83 85 87 89 91 93 95 97 99]
課題0.5.19
[{0 A} {1 B} {2 C} {3 D} {4 E}]
課題0.5.20
[11 40 60]
%