Go语言 如何删除数组有子数组,我想删除所有

yc0p9oo0  于 2023-06-19  发布在  Go
关注(0)|答案(1)|浏览(152)

我有一个名为arrTransaksi的数组,它的子数组名为arrPembelian,我想从该数组中删除所有数据,该如何操作?我正试着从那个数组中做一些统计

package main

import "fmt"

const NMAX = 1024

type barang struct {
    nama, kategori        string
    hargaModal, hargaJual float64
    stok, penjualan       int
}

type transaksi struct {
    tanggal   string
    idx       int
    pembelian arrPembelian
}

type pembelian struct {
    barang string
    jumlah int
}

type arrBarang [NMAX]barang
type arrTransaksi [NMAX]transaksi
type arrPembelian [NMAX]pembelian

func main() {
    var perintah_main, perintah_barang, perintah_transaksi, n, i, m, tgl, brg int
    var totalModal, totalPendapatan float64
    var targetBarang, A, perintah_hapus_barang, targetTransaksi, targetTanggal string
    var b arrBarang
    var t arrTransaksi
        
        clearScreen()
        fmt.Print("PADA TANGGA BERAPA YANG INGIN DI HAPUS: ")
    fmt.Scan(&targetTanggal)
    CTT := cekTransaksiTanggal(t, n, targetTanggal)
    if CTT >= 0 {
            clearScreen()
            for i := 0; i < t[CTT].idx; i++ {
                    fmt.Println(t[CTT].pembelian[i])
            }
            fmt.Scan(&perintah_hapus_barang)
            if perintah_hapus_barang == "Y" {
                    hapusTransaksi(&t, &tgl, &m, CTT)
                    hapusBarangTransaksi(&t, CTT, &m)
                }
        }
}
func cekTransaksiBarang(t arrTransaksi, CTT int, target string) int {
    for i := 0; i <= t[CTT].idx; i++ {
        if target == t[CTT].pembelian[i].barang {
            return i
        }
    }
    return -1
}

func hapusTransaksi(t *arrTransaksi, tgl, m *int, target int) {
    for i := target; i < *tgl; i++ {
        t[i] = t[i+1]
        *tgl--
    }
}
func hapusBarangTransaksi(t *arrTransaksi, CTT int, m *int) {
    for j := 0; j < *m; j++ {
        t[CTT].pembelian[j] = t[CTT].pembelian[j+1]
        *m--
    }

}

我也有统计功能来查看该项目的统计信息

func statistics(b *arrBarang, t *arrTransaksi, n, m int, totalModal float64, totalPendapatan float64) {
    fmt.Println("=======================| STATISTIK |========================")
    fmt.Println("|                                                          |")
    fmt.Println("|                 DATA MODAL DAN PENDAPATAN                |")
    fmt.Println("|                                                          |")
    fmt.Println("============================================================")
    for i := 0; i < n; i++ {
        totalPendapatan += b[i].hargaJual * float64(b[i].penjualan)
    }
    fmt.Println("Total Modal: Rp.", totalModal)
    fmt.Println("Total Pendapatan: Rp.", totalPendapatan)
    fmt.Println("============================================================")
    fmt.Println("|                                                          |")
    fmt.Println("|            [ 5 BARANG PALING BANYAK TERJUAL ]            |")
    fmt.Println("|                                                          |")
    fmt.Println("============================================================")

    shortingBarang(b, n)

    // Display top 5
    for i := 0; i < 5 && i < n; i++ {
        fmt.Println(b[i].nama, "-", b[i].penjualan, "unit")
    }
    fmt.Println("============================================================")
    fmt.Println("|                      TOKO KEREN                          |")
    fmt.Println("============================================================")
    fmt.Println("          TEKAN [X] UNTUK KEMBALI KE HALAMAN UTAMA          ")
    var A string
    fmt.Scan(&A)
}

我已经运行了该程序,我试图运行hapusTransaksihapusBarangTransaksi来删除该数组中的特定值,它已经消失了,但统计数据仍然没有得到更新。

c9qzyr3d

c9qzyr3d1#

为什么不使用切片来代替数组呢?这允许擦除数据的简单方式:

intSlice := []int{1, 2, 3}

// do stuff with var intSlice

// erase data
intSlice = nil

如果必须使用array,则示例变为

intArray := [3]int{1, 2, 3}

// do stuff with var intArray

// erase data
intArray = [3]int{}

然而,数组不是空的,它到处都包含他的类型零值。
希望能帮上忙。

相关问题