अधिक संक्षिप्त तरीका नहीं है, आपने जो किया वह "सही" तरीका है; क्योंकि स्लाइस हमेशा एक-आयामी होते हैं, लेकिन उच्च-आयामी वस्तुओं के निर्माण के लिए रचना की जा सकती है। अधिक विवरण के लिए यह प्रश्न देखें: जाओ: दो आयामी सरणी की मेमोरी प्रतिनिधित्व कैसे है ।
एक चीज जिस पर आप सरलीकरण कर सकते हैं वह है for range
निर्माण का उपयोग करना :
a := make([][]uint8, dy)
for i := range a {
a[i] = make([]uint8, dx)
}
यह भी ध्यान दें कि यदि आप एक समग्र शाब्दिक के साथ अपने स्लाइस को शुरू करते हैं , तो आपको यह "मुफ्त" के लिए मिलता है, उदाहरण के लिए:
a := [][]uint8{
{0, 1, 2, 3},
{4, 5, 6, 7},
}
fmt.Println(a) // Output is [[0 1 2 3] [4 5 6 7]]
हां, इसकी अपनी सीमा है क्योंकि प्रतीत होता है कि आपको सभी तत्वों की गणना करनी होगी; लेकिन कुछ तरकीबें हैं, अर्थात् आपको सभी मानों की गणना करने की आवश्यकता नहीं है, केवल वे जो स्लाइस के तत्व प्रकार के शून्य मान नहीं हैं । इसके बारे में अधिक जानकारी के लिए, गोलंग सरणी आरंभीकरण में बंद आइटम देखें ।
उदाहरण के लिए यदि आप ऐसा स्लाइस चाहते हैं जहां पहले 10 तत्व शून्य हों, और फिर निम्न प्रकार से 1
और 2
, इसे इस तरह बनाया जा सकता है:
b := []uint{10: 1, 2}
fmt.Println(b) // Prints [0 0 0 0 0 0 0 0 0 0 1 2]
यह भी ध्यान दें कि यदि आप स्लाइस के बजाय सरण का उपयोग करते हैं , तो इसे बहुत आसानी से बनाया जा सकता है:
c := [5][5]uint8{}
fmt.Println(c)
आउटपुट है:
[[0 0 0 0 0] [0 0 0 0 0] [0 0 0 0 0] [0 0 0 0 0] [0 0 0 0 0]]
सरणियों के मामले में आपको "बाहरी" सरणी पर चलना नहीं पड़ता है और "आंतरिक" सरणियों को आरम्भ करना है, क्योंकि सरणियाँ वर्णनात्मक नहीं हैं, बल्कि मान हैं। ब्लॉग पोस्ट देखें Arrays, स्लाइस (और स्ट्रिंग्स): अधिक विवरण के लिए 'परिशिष्ट' के यांत्रिकी ।
गो खेल के मैदान पर उदाहरणों की कोशिश करें ।
cannot use [5][2]string literal (type [5][2]string) as type [][]string in field value
जब मुझे लगता है कि मैं कह रहा हूँ कि एक टुकड़ा है, तो मुझे असाइन करने का प्रयास करें।