Go言語でエージェントシミュレータを作るのに必要なパーツを作っています。
エージェントをオブジェクト風に作って、配列にいれて、終了したら、エージェントを消滅する。
package main
import (
"fmt"
"math/rand"
)
type person struct {
number int // 番号
mental_strength float64 // 勧誘に屈しない強さ
}
var p_array []*person // personの配列
func person_create(num int) *person {
p := new(person)
p.number = num
p.mental_strength = rand.Float64() // 勧誘を断わる強さ
p_array = append(p_array, p) // 配列に放り込む
return p
}
func (p *person) person_destroy() {
for index, v := range p_array {
if v == p {
fmt.Println("hit")
p_array = append(p_array[:index], p_array[index+1:]...)
break
}
}
p = nil //これでいいのかな?
}
func main() {
_ = person_create(0)
p1 := person_create(1)
p2 := person_create(2)
_ = person_create(3)
for index, v := range p_array {
fmt.Println(index, ":", v, v.number, v.mental_strength)
}
p2.person_destroy()
for index, v := range p_array {
fmt.Println(index, ":", v, v.number, v.mental_strength)
}
p1.person_destroy()
for index, v := range p_array {
fmt.Println(index, ":", v, v.number, v.mental_strength)
}
}
■出力結果
PS C:\Users\ebata\cult> go run main.go
0 : &{0 0.6046602879796196} 0 0.6046602879796196
1 : &{1 0.9405090880450124} 1 0.9405090880450124
2 : &{2 0.6645600532184904} 2 0.6645600532184904
3 : &{3 0.4377141871869802} 3 0.4377141871869802
hit
0 : &{0 0.6046602879796196} 0 0.6046602879796196
1 : &{1 0.9405090880450124} 1 0.9405090880450124
2 : &{3 0.4377141871869802} 3 0.4377141871869802
hit
0 : &{0 0.6046602879796196} 0 0.6046602879796196
1 : &{3 0.4377141871869802} 3 0.4377141871869802