วิธีการรวมสตริงเป็นสตริงเดียว?


130
package main

import (
"fmt"
"strings"
)

func main() {
reg := [...]string {"a","b","c"}
fmt.Println(strings.Join(reg,","))
}

ทำให้ฉันมีข้อผิดพลาด:

prog.go: 10: ไม่สามารถใช้ reg (type [3] string) เป็น type [] string ในการโต้แย้ง strings เข้าร่วม

มีวิธีที่ตรงกว่า / ดีกว่าการวนซ้ำและเพิ่มลงใน var หรือไม่?


2
ทำไมไม่ใช้reg := []string {"a","b","c"}?
Sean M

คำตอบ:


102

ชื่อคำถามของคุณคือ:

วิธีการรวมสตริงเป็นสตริงเดียว?

แต่ในความเป็นจริงregคือไม่ได้เป็นชิ้น แต่ความยาวสามอาร์เรย์ [...]stringเป็นเพียงน้ำตาลประโยคสำหรับ [3]string(ในกรณีนี้)

เพื่อให้ได้ชิ้นงานจริงคุณควรเขียน:

reg := []string {"a","b","c"}

(ทดลองใช้: https://play.golang.org/p/vqU5VtDilJ )

อนึ่งหากคุณจำเป็นต้องรวมอาร์เรย์ของสตริงเป็นสตริงเดียวจริงๆคุณสามารถรับชิ้นส่วนจากอาร์เรย์ได้โดยการเพิ่ม[:]ดังนี้:

fmt.Println(strings.Join(reg[:], ","))

(ทดลองใช้: https://play.golang.org/p/zy8KyC8OTuJ )


7
โปรดระบุรหัสการทำงานในคำตอบของตัวเองสนามเด็กเล่นเป็นข้อดี แต่ไม่เพียงพอสำหรับคำตอบที่ยอมรับได้ ;-) TY!
ร่มเงา

8
@shadyyx: ฉันยอมรับว่าลิงค์สนามเด็กเล่นเป็นส่วนเสริมอย่างเคร่งครัด แต่ฉันไม่แน่ใจว่าสิ่งที่คุณคิดว่าขาดหายไปจากคำตอบที่เหมาะสม ข้อผิดพลาดเพียงอย่างเดียวของ OP อยู่ในบรรทัดที่ 10 และฉันได้ให้เวอร์ชันที่แก้ไขแล้วของบรรทัดนั้นพร้อมกับคำอธิบาย (คุณแนะนำว่าฉันควรคัดลอกโปรแกรมตัวอย่างทั้งหมดของเขา / เธอลงในคำตอบหรือไม่ถ้าเป็นเช่นนั้น - ฉันไม่เห็นด้วย)
ruakh

1
"พยายามรวมสไลซ์เข้ากับสตริง" โซลูชันของคุณใช้ได้กับสตริงแบบสไลซ์เท่านั้นแทนที่จะเป็นแบบสไลซ์ทั่วไป
Steven Roose

107

ใช้สไลซ์ไม่ใช่อาร์เรย์ เพียงแค่สร้างโดยใช้

reg := []string {"a","b","c"}

อีกทางเลือกหนึ่งคือการแปลงอาร์เรย์ของคุณเป็นสไลซ์เมื่อเข้าร่วม:

fmt.Println(strings.Join(reg[:],","))

อ่านบล็อกไปเกี่ยวกับความแตกต่างระหว่างชิ้นและอาร์เรย์


26

สิ่งนี้ยังคงมีความเกี่ยวข้องในปี 2018

ถึง String

import strings
stringFiles := strings.Join(fileSlice[:], ",")

กลับไปที่ Slice อีกครั้ง

import strings
fileSlice := strings.Split(stringFiles, ",")
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.