Golang の arrayとsliceの違い
func totalDistance(sliceA []int, prt int) (dis float64, sliceB []int, max_Bus_Count []int)
という関数を作ったのはいいが、これの呼び出しが上手くできずに、ここ数日作業が滞っていました。
結果としては、正解は以下の通り
var sliceZ [100][]int // または、sliceZ := [100][]int{}
var totalDis [100]float64 // または、totalDis := [100]float64{}
max_Bus_Count := []int{} // または、var max_Bus_Count []inttotalDis[0], sliceZ[0], max_Bus_Count = totalDistance(sliceZ[0], 1)
であり、よく分からんのが、":="と "{}"のペアだが、多分、初期値を放り込めるようにしているものだろう(ここでは入れていないが)。
C言語で書くとこんな感じかと。
#include <stdio.h>
int main() {
int sliceZ[100][90];
double totalDis[100];
int max_Bus_Count[3];int a = totalDistance(sliceZ[0], 1, totalDis[0], max_Bus_Count);
}int totalDistance(int slizeZ, int *p, double totalDis, int max_Bus_Count) {
return 0;
}
こうやってみると、Goの配列宣言は、配列が動的に記載できる分、分かりにくいと思う。
なんで、C言語の宣言を踏襲してくれなかったかなーと思うのだが、
Array
サイズを指定して宣言するもの。実体的な値。メモリを参照するものではない。
a := [3]int64{1, 2, 3}
故に、
a := [3]int{1, 2, 3}
b := a
とすると、aとbが、別のメモリ領域に展開される
Slice
sliceはarrayへの参照を持つデータ構造
s1 := []int{1,2,3} # ここで配列の数(例"3")を宣言しないのがミソ
s2 := s1
s2[1] = 0
こっちは、s1とs2が同じ値になる。
append()で要素数を追加する