Slice mengembalikan panjang yang tidak dijangka

WBOY
Lepaskan: 2024-02-09 10:21:29
ke hadapan
688 orang telah melayarinya

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))
}
Salin selepas log masuk

Keluaran ialah

13
9
3
7
3
Salin selepas log masuk

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"}
Salin selepas log masuk
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"}
Salin selepas log masuk
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"}
Salin selepas log masuk
🎜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!

sumber:stackoverflow.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan