Rumah >pembangunan bahagian belakang >Golang >Slice mengembalikan panjang yang tidak dijangka

Slice mengembalikan panjang yang tidak dijangka

WBOY
WBOYke hadapan
2024-02-09 10:21:29717semak imbas

Slice mengembalikan panjang yang tidak dijangka

editor php Youzi sering menghadapi masalah mengembalikan panjang yang tidak dijangka apabila menggunakan operasi menghiris. Operasi menghiris ialah salah satu daripada operasi tatasusunan yang biasa digunakan Anda boleh mendapatkan beberapa elemen tatasusunan dengan menentukan kedudukan permulaan dan kedudukan penamat. Walau bagaimanapun, kadangkala kami mendapati bahawa panjang kepingan yang dikembalikan tidak seperti yang diharapkan, yang mungkin disebabkan oleh beberapa kesilapan atau salah faham yang biasa. Dalam artikel ini, kami akan memperkenalkan secara terperinci masalah yang mungkin anda hadapi semasa operasi menghiris dan menyediakan penyelesaian untuk membantu anda memahami dan menggunakan operasi penghirisan dengan lebih baik.

Kandungan soalan

Saya sedang mengerjakan golang dan saya berhenti dan ia mengelirukan saya.

package main

import "fmt"

func main() {
    month := [...]string{1: "jan", 2: "fab", 3: "march", 4: "april", 5: "may", 6: "june", 7: "july", 8: "aug", 9: "sep", 10: "oct", 11: "nov", 12: "dec"}
    fmt.println(cap(month))
    summer := month[6:9]
    q2 := month[4:7]
    fmt.println(cap(q2))
    fmt.println(len(q2))

    fmt.println(cap(summer))
    fmt.println(len(summer))
}

Keluaran ialah

13
9
3
7
3

Kepingan bulan mempunyai 12 elemen, tetapi cap(month) dan len(month) mengembalikan 13, kenapa? cap(month)len(month) 返回 13,为什么?

解决方法

首先,month 是一个数组 - 不是切片 - 其类型为 [13]string。只需查看其类型,我们就知道它有 13 个元素(长度),而切片的类型为 []string

Penyelesaian

0 处为数组指定 stringPertama sekali, bulan ialah array - bukan sekeping - dan jenisnya ialah [13]string. Hanya melihat jenisnya, kita tahu bahawa ia mempunyai 13 elemen (panjang) dan jenis hirisan ialah []string.

Pengindeksan tatasusunan dan hirisan bermula dari sifar, bukan dari satu. Memandangkan anda tidak mengindeks nilai

:

month := [...]string{1: "jan", 2: "fab", 3: "march", 4: "april", 5: "may", 6: "june", 7: "july", 8: "aug", 9: "sep", 10: "oct", 11: "nov", 12: "dec"}
stringIa bersamaan dengan:
month := [13]string{0: "", 1: "jan", 2: "fab", 3: "march", 4: "april", 5: "may", 6: "june", 7: "july", 8: "aug", 9: "sep", 10: "oct", 11: "nov", 12: "dec"}
Iaitu, nilai

sifar

(iaitu rentetan kosong) ... 替换为 13 disediakan sebagai elemen pertama.

Sila ambil perhatian bahawa saya ada

. Ellipsis memberitahu pengkompil untuk membuat kesimpulan panjang tatasusunan (yang merupakan sebahagian daripada jenisnya) berdasarkan pemula.

month 的长度仍将为 13 Walaupun anda menggunakan literal hirisan dan bukannya literal tatasusunan sebagai pemula:

month := []string{1: "Jan", 2: "Fab", 3: "March", 4: "April", 5: "May", 6: "June", 7: "July", 8: "Aug", 9: "Sep", 10: "Oct", 11: "Nov", 12: "Dec"}
🎜Atas sebab yang sama seperti di atas, (menghiris dalam kes ini) 🎜. 🎜

Atas ialah kandungan terperinci Slice mengembalikan panjang yang tidak dijangka. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam