Tôi gặp vấn đề khi sắp xếp chuỗi theo ký tự (để kiểm tra xem hai chuỗi có phải là đảo chữ hay không, tôi muốn sắp xếp cả hai chuỗi và kiểm tra xem chúng có bằng nhau không).
Tôi có thể có được chuỗi như thế này S
của []chữ rune
thể hiện:
rune := make([]rune, len(s))
sao chép(rune, []rune(s))
Tôi có thể sắp xếp các số nguyên như thế này
someInts := []int{5, 2, 6, 3, 1, 4} // chưa được sắp xếp
sắp xếp.Ints(một sốInts)
Nhưng chữ rune
chỉ một int32
bí danh, vì vậy tôi có thể gọi
sắp xếp.Ints(runes)
Tuy nhiên, tôi nhận được lỗi:
không thể sử dụng rune (kiểu []rune) làm kiểu []int trong đối số hàm
Vậy...làm cách nào để sắp xếp một lát int32, int64 hoặc int*?
biên tập: Tôi đã sửa lại chữ rune của mình rồi, nhưng trời ơi, nó xấu quá.
loại RuneSlice []rune
func (p RuneSlice) Len() int { trả về len(p) }
func (p RuneSlice) Less(i, j int) bool { trả về p[i] < p[j] }
func (p RuneSlice) Swap(i, j int) { p[i], p[j] = p[j], p[i] }
func sắp xếp(s chuỗi) chuỗi {
rune := []rune(s)
sắp xếp.Sort(RuneSlice(runes))
trả về chuỗi(runes)
}
Vì vậy, về cơ bản, nếu bạn có một lát cắt, bạn phải gói nó trong một phần triển khai sắp xếp.Giao diện
thuộc loại. Tất cả các triển khai này sẽ có cùng một nội dung phương thức (như sắp xếp.IntSlice
Và sắp xếp.Float64Slice
). Nếu điều này thực sự xấu đến thế thì tại sao họ lại không loại
Trình bao bọc WhatSlice có sẵn trong gói? Việc thiếu thuốc generic hiện đang bắt đầu gây tổn hại nặng nề. Phải có một cách tốt hơn để phân loại mọi thứ.
sử dụng sort.Sort(giao diện dữ liệu)
và thực hiệnsắp xếp.Giao diện
, hãy xem tài liệu về gói để biết ví dụ.
Bạn không thể int32
của chữ rune
được sử dụng như số nguyên
. Kiểm trabình luận số nguyên
.
int là kiểu số nguyên có dấu có kích thước ít nhất là 32 bit. Tuy nhiên, đây là một kiểu riêng biệt và không phải là bí danh cho, chẳng hạn như int32.
Tôi là một lập trình viên xuất sắc, rất giỏi!