"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيفية إلحاق القيم بالمصفوفات داخل الخرائط في Go؟

كيفية إلحاق القيم بالمصفوفات داخل الخرائط في Go؟

تم النشر بتاريخ 2024-11-21
تصفح:596

How to Append Values to Arrays Inside Maps in Go?

إلحاق القيم بالمصفوفات داخل خريطة في Go

عند العمل مع الخرائط في Go، قد يكون التعامل مع المصفوفات داخل تلك الخرائط أمرًا صعبًا. توفر هذه المقالة حلاً لمشكلة إلحاق القيم بالمصفوفات المخزنة داخل الخريطة.

لفهم المشكلة، خذ بعين الاعتبار الكود التالي:

type Example struct {
    Id []int
    Name []string
}
var MyMap map[string]Example

هنا، MyMap عبارة عن خريطة تقوم بتعيين سلاسل لمثيلات بنية المثال. يحتوي هيكل المثال على معرف الصفائف والاسم. الهدف هو إلحاق قيم بهذه المصفوفات.

غالبًا ما تتضمن المحاولة الأولية للقيام بذلك أساليب استدعاء في بنية المثال وتمرير جهاز استقبال المؤشر للوصول إلى المصفوفات وتعديلها. ومع ذلك، فإن تعيين نتيجة Oferty.AppendExample(1, "SomeText") مباشرة إلى MyMap["key1"] لن يعمل لأن الخريطة تخزن نسخة من بنية المثال، وليس البنية نفسها.

الحل يكمن في تعديل الكود كالتالي:

package main

import "fmt"

type Example struct {
    Id []int
    Name []string
}

func (data *Example) AppendOffer(id int, name string) {
    data.Id = append(data.Id, id)
    data.Name = append(data.Name, name)
}

var MyMap map[string]*Example

func main() {
    obj := &Example{[]int{}, []string{}}
    obj.AppendOffer(1, "SomeText")
    MyMap = make(map[string]*Example)
    MyMap["key1"] = obj
    fmt.Println(MyMap)
}

من خلال إنشاء مثيل لبنية المثال وتخزين مرجع له في الخريطة (باستخدام نوع المؤشر)، يمكننا تعديل المصفوفات مباشرة. تعمل طريقة AppendOffer على مؤشر لبنية المثال، مما يسمح لنا بإلحاق قيم بالمصفوفات.

يقوم هذا الحل بإلحاق القيم بشكل فعال بالمصفوفات داخل بنية المثال، المخزنة في MyMap. فهو يوفر طريقة واضحة وموجزة لإدارة المصفوفات داخل الخرائط في Go.

أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3