मैं एक मर्ज सॉर्ट कार्यान्वयन में सरणी के लिए आवश्यक लंबाई की गणना करने की कोशिश कर रहा हूं, मैं go
में लिख रहा हूं। यह इस तरह दिखता है:जाओ त्रुटि: गैर-निरंतर सरणी
func merge(array []int, start, middle, end int) {
leftLength := middle - start + 1
rightLength := end - middle
var left [leftLength]int
var right [rightLength]int
//...
}
मैं तो यह शिकायत मिलती है, जब go test
चल:
./mergesort.go:6: non-constant array bound leftLength
./mergesort.go:7: non-constant array bound rightLength
मुझे लगता है go
उपयोगकर्ताओं परिकलित मूल्य के साथ किसी सरणी की लंबाई instantiating का आनंद नहीं करता है। यह केवल स्थिरांक स्वीकार करता है। क्या मुझे बस छोड़ देना चाहिए और इसके बजाय एक टुकड़ा का उपयोग करना चाहिए? मुझे उम्मीद है कि स्लाइस एक गतिशील सरणी है जिसका अर्थ यह है कि यह एक लिंक की गई सूची है या जब यह पूर्ण हो जाता है तो प्रतियों को बड़ी सरणी में कॉपी किया जाता है।
क्या मतलब है कि आप "उम्मीद" एक टुकड़ा गतिशील सरणी है? [पढ़ें कि वास्तव में एक टुकड़ा क्या है] (https://blog.golang.org/go-slices-usage-and-internals)। –
गो में क्या स्लाइस बनाए जाते हैं। हुड के तहत वे सिर्फ सरणी के लिए पॉइंटर्स हैं। – user937284
@TimCooper दिलचस्प। ऐरे के एक जटिल इंटरफ़ेस को देने के बजाय स्लाइस एक और परत है जो सरणी हेरफेर को सरल बनाती है? – Breedly