Cara Melaksanakan Fungsi Seperti Timbunan Menggunakan Saluran Go
Saluran Go sememangnya direka bentuk sebagai first-in-first-out (FIFO) beratur. Walaupun tingkah laku ini sesuai untuk banyak senario, mungkin terdapat situasi di mana struktur seperti tindanan masuk dahulu (LIFO) diingini.
Artikel ini bertujuan untuk menerangkan sebab saluran tidak boleh diubah suai secara langsung kepada berkelakuan seperti tindanan dan menyediakan penyelesaian alternatif menggunakan pakej bekas/timbunan.
Mengapa Saluran bukan Tindanan
Saluran menggunakan penimbal bulat asas untuk menyimpan elemen, memastikan bahawa elemen diambil mengikut susunan ia ditambah. Tingkah laku FIFO ini memastikan bahawa elemen pertama yang ditambahkan juga merupakan elemen pertama yang diambil semula. Melaksanakan gelagat LIFO memerlukan perubahan asas kepada struktur dalaman saluran, yang tidak boleh dilaksanakan.
Menggunakan Timbunan untuk Fungsi Timbunan
Paket bekas/timbunan menyediakan struktur data timbunan yang menyokong prinsip LIFO. Timbunan menyusun elemen dalam cara yang menjamin bahawa elemen terakhir yang ditambahkan berada pada akar timbunan dan boleh diambil dengan cekap.
Coretan kod berikut menunjukkan cara mencipta tindanan berasaskan timbunan:
<code class="go">import ( "container/heap" ) type Stack []int func (s Stack) Len() int { return len(s) } func (s Stack) Less(i, j int) bool { return s[i] > s[j] } func (s Stack) Swap(i, j int) { s[i], s[j] = s[j], s[i] } func (s *Stack) Push(x interface{}) { heap.Push(s, x.(int)) } func (s *Stack) Pop() (v int) { v = heap.Pop(s).(int) return v }</code>
Timbunan tersuai ini membolehkan anda melakukan elemen Tolak dan Pop, berkelakuan seperti tindanan LIFO dengan berkesan. Walaupun ia tidak mengubah suai saluran asas secara langsung, ia menyediakan antara muka seperti tindanan untuk mendapatkan semula elemen.
Atas ialah kandungan terperinci Berikut ialah beberapa tajuk berasaskan soalan yang sesuai dengan kandungan artikel anda: * **Bolehkah Saluran Go Digunakan sebagai Tindanan? Meneroka Alternatif dengan Heaps** * **Gelagat Seperti Tindanan dalam Pergi: Mengapa Saluran Don\'. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!