प्रौद्योगिकी साझेदारी

[Go series] सरणी, स्लाइस् तथा नक्शा

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

पूर्वं परं च संयोजयन्तु

अस्माभिः पूर्वलेखे if and for इति परिचयः कृतः ।continue १०० अन्तः समसङ्ख्यानां योगं गणयितुं कथनम् । यथा वयं कोडं लिखामः,continuestatement अस्मान् कतिपयान् पुनरावृत्तयः त्यक्तुं साहाय्यं करिष्यति येषां आवश्यकता नास्ति, उदाहरणार्थं, अस्मिन् उदाहरणे, वयं सर्वाणि विषमसङ्ख्यानि लङ्घयिष्यामः ।

  1. sum := 0
  2. for i := 1; i < 100; i++{
  3. if i & 1 == 0 {
  4. continue
  5. }
  6. sum += i
  7. }
  8. fmt.Println("the sum is",sum)

शिक्षणं आरभत

प्रोग्रामिंग् इत्यस्मिन् प्रायः अस्माकं समानप्रकारस्य तत्त्वसमूहेन सह व्यवहारः करणीयः भवति, एते तत्त्वसमूहाः च Go भाषायां विशिष्टैः दत्तांशसंरचनैः प्रतिनिधित्वं कुर्वन्ति । अद्य अहं भवद्भ्यः Go इत्यस्मिन् विस्तरेण अनेकानाम् संग्रहप्रकारानाम् परिचयं करिष्यामि: array, slice and map इति ।

सरणी

प्रथमं सरणीभिः आरभामः । Array इति Go इत्यस्मिन् सर्वाधिकं मूलभूतं दत्तांशसंरचना अस्ति । एकदा सरणी घोषिता भवति तदा तस्य दीर्घता परिवर्तयितुं न शक्यते । सरणीनां घोषणां आरम्भीकरणं च अतीव सरलं भवति,

सरणी घोषयतु

सरणीं घोषयन्ते सति भवद्भिः सरणीप्रकारः, सरणीदीर्घता च निर्दिष्टव्या । अत्र सरणी कथं घोषितं भवति ।

var arrayName [arrayLength]elementType

यथा, 5 दीर्घतायाः पूर्णाङ्कसरणीं घोषयन्तु ।

var numbers [5]int
सरणीं आरभत

भवान् विविधरीत्या सरणीं आरभतुं शक्नोति:

  • शाब्दिकप्रारम्भीकरणस्य उपयोगं कुर्वन्तु : १.
var numbers = [5]int{1, 2, 3, 4, 5}
  • उपयुञ्जताम्‌:=लघुकथनम् : १.
numbers := [5]int{1, 2, 3, 4, 5}
  • स्वचालितरूपेण सरणीदीर्घतायाः अनुमानं कुर्वन्तु:
numbers := [...]int{1, 2, 3, 4, 5}
  • अनुक्रमणिका आरम्भीकरणं निर्दिशन्तु : १.
numbers := [5]int{0: 1, 4: 5}

सरणीनां लक्षणम्

  • नियतदीर्घता: सरणीयाः दीर्घता यदा घोषिता भवति तदा निर्धारितं भवति, पश्चात् परिवर्तयितुं न शक्यते ।
  • समानप्रकारस्य तत्त्वानि: सरणीषु केवलं समानप्रकारस्य तत्त्वानि एव भवितुं शक्नुवन्ति ।
  • स्मृतिविनियोगः क्रमशः: स्मृतौ सरणीतत्त्वानि सङ्गतरूपेण आवंटितानि भवन्ति, येन सरणीतत्त्वानां अभिगमनं अतीव कुशलं भवति ।

सरणीतत्त्वानि अभिगम्यताम्

भवन्तः अनुक्रमणिकाद्वारा सरणीयां तत्त्वानि अभिगन्तुं शक्नुवन्ति, 0 तः आरभ्य:

value := numbers[2] // 获取索引为 2 的元素

ट्रैवर्स सरणी

भवन्तः उपयोक्तुं शक्नुवन्तिforसरणीयां सर्वेषां तत्त्वानां माध्यमेन लूप् कुर्वन्तु:

  1. for i, value := range numbers {
  2. fmt.Printf("Index: %d, Value: %dn", i, value)
  3. }

सरणीयाः लम्बता

भवन्तः अन्तर्निर्मितस्य उपयोगं कर्तुं शक्नुवन्तिlenसरणीयाः दीर्घतां प्राप्तुं कार्यं : १.

length := len(numbers)

सरणीयाः शून्यं मूल्यम्

यदि कश्चन सरणी स्पष्टतया आरम्भः न भवति तर्हि तस्य तत्त्वानि स्वयमेव तेषां प्रकारस्य शून्यमूल्ये सेट् भवन्ति । यथा, पूर्णाङ्कसरण्याः शून्यमूल्यं 0 भवति :

var numbers [5]int // 所有元素都是 0

बहुआयामी सरणी

Go भाषा बहुआयामी-सरणयः अपि समर्थयति । 2x3 पूर्णाङ्कसरण्याः घोषणायाः आरम्भस्य च उदाहरणं निम्नलिखितम् अस्ति ।

  1. var matrix [2][3]int
  2. matrix = [2][3]int{{1, 2, 3}, {4, 5, 6}}

सरणीनां सीमाः

यतः सरणीयाः दीर्घता नियतं भवति, अतः केषुचित् सन्दर्भेषु एतत् अतीव लचीलं न भवेत् । यदि भवन्तः चर-दीर्घतायाः संग्रहस्य आवश्यकतां अनुभवन्ति तर्हि भवन्तः स्लाइस् इत्यस्य उपयोगं कर्तुं शक्नुवन्ति ।

अंश

तदनन्तरं slice इति अधिकं लचीलः अन्तर्निर्मितप्रकारः अस्ति यः गतिशीलः सरणी इति चिन्तयितुं शक्यते । स्लाइस् इत्यस्य दीर्घता परिवर्तनशीलं भवति तथा च एतत् सरणीयाः आधारेण निर्मितं भवति, येन अधिका सुविधा भवति । अत्र स्लाइस् कथं घोषयितुं आरभ्यते च इति दर्शितम् अस्ति ।

  1. s := make([]int, 3) // 创建一个长度为3的整型切片
  2. s[0] = 1 // 切片元素赋值
  3. s[1] = 2
  4. s[2] = 3
  5. s = append(s, 4) // 向切片追加元素

Go भाषायां यद्यपि एरेस् तथा स्लाइस् इत्येतयोः उपयोगः समानप्रकारस्य तत्त्वानां श्रृङ्खलायाः संग्रहणार्थं भवति तथापि तेषु स्मृतिविनियोगे, आकारविविधतायां, उपयोगे च महत्त्वपूर्णः अन्तरः भवति अत्र एरेस् तथा स्लाइस् इत्येतयोः मुख्यभेदाः सन्ति ।

आकार परिवर्तनशीलता

  • सरणी : सरणीयाः आकारः यदा घोषितः भवति तदा निर्धारितः भवति, पश्चात् परिवर्तयितुं न शक्यते ।सरणीयाः आकारः तस्य प्रकारस्य भागः भवति, अतः[3]intतथा[4]intभिन्नप्रकाराः सन्ति।
  • अंश : स्लाइस् गतिशीलाः भवन्ति, रनटाइम् इत्यत्र वर्धयितुं वा संकुचितुं वा शक्नुवन्ति ।स्लाइसस्य परिमाणं तस्य प्रकारस्य भागः नास्ति अतः[]intसर्वेषां पूर्णाङ्कस्लाइस् कृते सामान्यः प्रकारः अस्ति ।

स्मृतिविनियोगः

  • सरणी : सरणीः मूल्यप्रकाराः सन्ति, यदा च सरणीः फंक्शन् पैरामीटर् रूपेण पारितः भवति तदा तस्य मूल्यस्य प्रतिलिपिः पारिता भवति । अस्य अर्थः अस्ति यत् फंक्शन् इत्यस्य अन्तः एरे इत्यस्य परिवर्तनेन मूल एरे इत्यस्य प्रभावः न भवति ।
  • अंश : स्लाइस् एकः सन्दर्भप्रकारः अस्ति, यस्मिन् अन्तर्निहितस्य सरणी, स्लाइस् इत्यस्य दीर्घता, क्षमता च सूचकः भवति । यदा स्लाइस् फंक्शन् पैरामीटर् रूपेण पारितं भवति तदा सूचकस्य प्रतिलिपिः पारिता भवति, अतः फंक्शन् अन्तः स्लाइस् परिवर्तनं मूलस्लाइस् प्रभावितं करिष्यति ।

आरम्भीकरणम्

  • सरणी: सरणीयाः आरम्भे तस्य आकारः निर्दिष्टः भवितुमर्हति, तत्क्षणमेव तत्त्वमूल्यानि नियुक्तुं शक्यन्ते ।
  • अंश: स्लाइस् अक्षरशः, .makeआरम्भं कर्तुं सरणीतः कार्यं वा स्लाइस् वा, कोऽपि आकारः निर्दिष्टः नास्ति ।

नमूना कोड

अत्र एरेस् तथा स्लाइस् इत्येतयोः कृते आरम्भीकरणस्य उदाहरणानि सन्ति ।

  1. // 数组
  2. var arr [3]int = [3]int{1, 2, 3}
  3. // 切片
  4. var slice []int = []int{1, 2, 3}
  5. // 或者使用 make 函数
  6. slice := make([]int, 3)

कार्यात्मकभेदाः

  • सरणी: यतः आकारः नियतः अस्ति, अतः संकलनसमये सरणीयाः आकारः ज्ञायते, येन स्टैक् इत्यत्र सरणीयाः कृते स्मृतिः आवंटनं सम्भवं भवति, तथा च सरणीतत्त्वानां अभिगमनस्य समयजटिलता O(1) भवति
  • अंश: स्लाइसिंग् इत्यनेन अधिकं लचीलापनं प्राप्यतेappend फंक्शन् एलिमेण्ट्स् योजयति, अथवा स्लाइसिंग् ऑपरेशन्स् माध्यमेन उपस्लाइस् प्राप्नोति ।स्लाइस् इत्यस्य अन्तर्निहितः सरणी राशेः उपरि आवंटितः भवितुम् अर्हति, स्लाइस् तत्त्वानां अभिगमनस्य समयजटिलता अपि O(1) भवति, परन्तुappendअन्तर्निहितस्य सरणीयाः पुनर्विनियोगस्य परिणामः भवितुम् अर्हति, यत् सामान्यतया O(n) क्रिया भवति ।

मानचित्रणम्

अन्ते मानचित्रणं पश्यामः । नक्शा Go इत्यस्मिन् एकः सहयोगात्मकः सरणी अस्ति यः मूल्यानां कृते कीलानां नक्शाङ्कनं करोति । मानचित्रस्य कुञ्जिकाः समानतासञ्चालकेन समर्थिताः कोऽपि प्रकारः भवितुम् अर्हति, यथा पूर्णाङ्काः, प्लवमानबिन्दुसङ्ख्याः, स्ट्रिंग्, सूचकाः, अन्तरफलकाः (यावत् अन्तरफलकस्य अन्तः निहिताः मूल्यानि तुलनीयानि सन्ति), संरचनाः, सरणी च नक्शाङ्कितं मूल्यं कस्यापि प्रकारस्य भवितुम् अर्हति ।

घोषणा एवं आरम्भीकरण

नक्शा घोषित करें

नक्शां घोषयितुं वाक्यविन्यासः निम्नलिखितरूपेण अस्ति ।

var mapName map[keyType]valueType

यथा, कीलानि स्ट्रिंग् रूपेण मूल्यानि च पूर्णाङ्करूपेण युक्तं मानचित्रं घोषयन्तु :

var scores map[string]int
नक्शा आरम्भ करें

नक्शां घोषित्वा भवन्तः उत्तीर्णाः भवितुम् अर्हन्तिmakefunction इत्यस्य आरम्भं कर्तुं अतः तस्य उपयोगः कर्तुं शक्यते:

scores = make(map[string]int)

वैकल्पिकरूपेण, भवान् लघुघोषणाम् उपयुज्य आरम्भं कर्तुं शक्नोति:

scores := make(map[string]int)

घोषणासमये आरम्भार्थं अक्षरशः अपि उपयोक्तुं शक्नुवन्ति:

  1. scores := map[string]int{
  2. "alice": 90,
  3. "bob": 85,
  4. "charlie": 88,
  5. }

मानचित्रस्य विशेषताः

  • कुंजी विशिष्टता: मानचित्रे प्रत्येकं कुञ्जी अद्वितीयं भवति यदि भवान् विद्यमानं कीलं सम्मिलितुं प्रयतते तर्हि तत् कीलस्य अनुरूपं मूल्यं अद्यतनं करिष्यति ।
  • विकारः:map अक्रमितः अस्ति, तथा च प्रत्येकं नक्शा पुनरावृत्तिः भवति तदा तत्त्वानां क्रमः भिन्नः भवितुम् अर्हति ।
  • गतिशील आकार:नक्शे आकारः गतिशीलः अस्ति, आवश्यकतानुसारं कील-मूल्ययुग्मं योजयितुं वा निष्कासयितुं वा शक्नुवन्ति ।
  • सन्दर्भप्रकारः: Map इति सन्दर्भप्रकारः यदा भवान् नक्शां फंक्शन् प्रति पारयति तदा यत् भवान् वास्तवतः पारयति तत् अन्तर्निहितदत्तांशसंरचनायाः सूचकः भवति ।

संचालन मानचित्र

तत्वं योजयन्तु
scores["alice"] = 90
तत्वं प्राप्नुत
value := scores["alice"]

यदि कीलः नास्ति तर्हि तस्य मूल्यप्रकारस्य शून्यमूल्यं प्रत्यागमिष्यति ।

कुञ्जी अस्ति वा इति पश्यन्तु

नक्शे कुञ्जी अस्ति वा इति परीक्षितुं भवान् अल्पविराम -ok idiom इत्यस्य उपयोगं कर्तुं शक्नोति:

  1. value, exists := scores["alice"]
  2. if exists {
  3. // 键存在
  4. } else {
  5. // 键不存在
  6. }
तत्त्वं विलोपयतु

उपयुञ्जताम्‌deleteफंक्शन् नक्शातः कील-मूल्ययुगलं हर्तुं शक्नोति:

delete(scores, "alice")

यदि कीलकं नास्ति, .deleteकार्यं किमपि न करोति।

नक्शां भ्रमन्तु

उपयुञ्जताम्‌forएकः लूप् नक्शे सर्वाणि कील-मूल्ययुग्मानि भ्रमितुं शक्नोति:

  1. for key, value := range scores {
  2. fmt.Printf("%s: %dn", key, value)
  3. }

मानचित्रस्य शून्यं मूल्यम्

नक्शे शून्यं मूल्यं भवतिnil .एकम्‌nil नक्शे अन्तर्निहितदत्तांशसंरचना नास्ति तथा च तत्त्वानि योजयितुं न शक्नोति ।नक्शे तत्त्वानि योजयितुं पूर्वं भवद्भिः अवश्यमेव उपयोगः करणीयःmakeतस्य आरम्भं कुरुत।

मानचित्रस्य लम्बता

भवन्तः अन्तर्निर्मितस्य उपयोगं कर्तुं शक्नुवन्तिlenनक्शे कील-मूल्ययुग्मानां संख्यां प्राप्तुं कार्यं:

length := len(scores)

नक्शा कुञ्जी प्रकार

नक्शे कुञ्जीः कोऽपि तुलनीयः प्रकारः भवितुम् अर्हति, यथा पूर्णाङ्काः, प्लवमानबिन्दुसङ्ख्याः, स्ट्रिंग्, सूचकाः, अन्तरफलकाः (यावत् अन्तरफलकस्य अन्तः निहिताः मूल्यानि तुलनीयानि सन्ति), संरचनाः, सरणी इत्यादयः स्लाइस्, मैप्स्, फंक्शन्स् च नक्शाकुंजीरूपेण उपयोक्तुं न शक्यन्ते यतोहि एते प्रकाराः समानतातुलनायाः समर्थनं न कुर्वन्ति ।

त्रुटिं कर्तुं सुलभम्

गो भाषायां एरे, स्लाइस्, मैप्स् च त्रीणि सामान्यतया प्रयुक्तानि दत्तांशसंरचनानि सन्ति, येषु प्रत्येकस्य भिन्नानि लक्षणानि, विचाराः च सन्ति । अत्र केचन बिन्दवः सन्ति येषां प्रयोगे ध्यानं दातव्यम् ।

सरणी

  • अतिबृहत् सरणीनां उपयोगं परिहरन्तु यतः ते बहु स्तम्भस्थानं गृह्णन्ति तथा च स्तम्भस्य अतिप्रवाहं जनयितुं शक्नुवन्ति ।
  • यदा नियतप्रमाणस्य दत्तांशसङ्ग्रहस्य आवश्यकता भवति तदा सरणीनां उपयोगः भवति ।

अंश

  • स्लाइसिंग् विस्तारिते सति स्मृतिपुनर्विनियोगः भवितुम् अर्हति यत् नित्यं विस्तारं परिहरितुं पर्याप्तक्षमताम् पूर्वविनियोगं कुर्वन्तु ।
  • अतिबृहत् स्लाइस् इत्यस्य उपयोगं परिहरन्तु यतः ते बहु राशौ स्थानं ग्रहीतुं शक्नुवन्ति ।
  • ध्यानं कुर्वन्तु यत् स्लाइस् इत्यस्य शून्यं मूल्यम् अस्तिnil, उपयोगात् पूर्वं आरम्भः करणीयः ।

नक्शा

  • नक्शे शून्यं मूल्यं भवतिnilnilकील-मूल्ययुग्मानां संग्रहणार्थं नक्शायाः उपयोगः न भवति तथा च उपयोगात् पूर्वं आरम्भः करणीयः ।
  • समवर्तीवातावरणे नक्शे पठनलेखनक्रियाः थ्रेड्-सुरक्षिताः न भवन्ति, म्यूटेक्स-लॉक् अथवा अन्यसमन्वयनतन्त्राणां उपयोगेन रक्षणस्य आवश्यकता वर्तते
  • उपयुञ्जताम्‌deleteयत् कुञ्जी नास्ति तत् विलोपनेन दोषः न उत्पद्यते, परन्तु कीलः अस्ति वा इति परीक्षितुं सुरक्षितम् ।