English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

دليل أساسي Golang

تعليمات التحكم في Golang

وظائف Golang & طرق

كائنات Golang

قطع Golang وarrays

كلمات Golang

مؤشرات Golang

واجهات Golang

مشاركة Golang

استثناءات Golang

متنوعة Golang

نسخ المقطع في لغة Go

قطعةتسمح بتخزين عناصر من نوع مشابه، وليس من المسموح بتخزين عناصر من أنواع مختلفة في سلسلة متغيرة الطول في نفس الحلقة. في المقطع، يمكنك استخدامدالة copy()نسخ قطعة واحدة إلى أخرى. بمعنى آخر، يمكن استخدام دالة copy() لنسخ عناصر قطعة إلى قطعة أخرى.

النحو:

func copy(dst, src []Type) int

في هذا السياق،dstيُمثل المقطع الهدف، بينماsrcعدد العناصر التي يجب نسخها، يجب أن يكونلتحديدlen(dst)أوlen(src)منأدنى قيمة، لنقم بعرض كيفية استخدامها باستخدام مثال مقدم

package main
import "fmt"
func main() {
    // إنشاء المقطع
    slc1 := []int{58, 69, 40, 45, 11, 56, 67, 21, 65}
    var slc2 []int
    slc3 := make([]int, 5)
    slc4 := []int{78, 50, 67, 77}
    // قبل النسخ
    fmt.Println("Slice_1:", slc1)
    fmt.Println("Slice_2:", slc2)
    fmt.Println("Slice_3:", slc3)
    fmt.Println("Slice_4:", slc4)
    //نسخ اللقطعة
    copy_1 := copy(slc2, slc1)
    fmt.Println("\nقطعة:", slc2)
    fmt.Println("عدد العناصر المنسوخة:", copy_1)
    copy_2 := copy(slc3, slc1)
    fmt.Println("\nقطعة:", slc3)
    fmt.Println("عدد العناصر المنسوخة:", copy_2)
    copy_3 := copy(slc4, slc1)
    fmt.Println("\nقطعة:", slc4)
    fmt.Println("عدد العناصر المنسوخة:", copy_3)
    // لا تخلط بينهما، لأنه في الجزء السابق
    // سطر النسخ لقطعة slc4
    // ولذلك يتم التعديل الدائم،أي
    // قطعة slc4 تحتوي على [58 69 40 45]
    copy_4 := copy(slc1, slc4)
    fmt.Println("\nقطعة:", slc1)
    fmt.Println("عدد العناصر المنسوخة:", copy_4)
}

النتيجة:

قطعة_1: [58 69 40 45 11 56 67 21 65]
قطعة_2: []
قطعة_3: [0 0 0 0 0]
قطعة_4: [78 50 67 77]
قطعة: []
عدد العناصر المنسوخة: 0
قطعة: [58 69 40 45 11]
عدد العناصر المنسوخة: 5
قطعة: [58 69 40 45]
عدد العناصر المنسوخة: 4
قطعة: [58 69 40 45 11 56 67 21 65]
عدد العناصر المنسوخة: 4

ملاحظات الاستخدام:في المثال السابق،لدينا أربعة قطع من النوع العددي،ونقوم بتنفيذ عملية النسخ:

  • copy 1 := copy(slc2, slc1): هنا،slc2 هو القطعة الهدف،slc1 هو القطعة المصدر. هنا،عندما نحاول نسخ قطعة slc1 إلى قطعة slc2، إذا كانت slc2 قطعة فارغة،فسيقوم دالة copy بتحديد أطول القطعتين،للقطعة الفارغة slc2،الطول الأصغر هو 0.

  • copy_2 := copy(slc3, slc1): هنا،slc3 هو القطعة الهدف، بينما slc1 هو القطعة المصدر. هنا،قطعة slc3 خالية،لذلك عندما نحاول استخدام دالة copy() لنسخ قطعة slc1 إلى slc3،بسبب طول القطعة هو 5،لذلك تم نسخ 5 عناصر من قطعة slc1،بسبب طول القطعة هو 5،لذلك يمكن لا يمكنه تخزين عنصر أكبر من 5.

  • copy_3 := copy(slc4،slc1):في هذا السياق،slc4هي اللقطعة الهدف، وslc1هي اللقطعة المصدر. عندما نحاول استخدام دالة copy() لنسخslc1 للقطعةslc4 عندما يتم نسخ اللقطعةslc4 طول اللقطعة هو 4، لذا لا يمكنها تخزين عنصر أكبر من 4.

  • copy_4 := copy(slc1,slc4):في هذا السياق، قد تشعر بالحيرة بعد النسخ. انظر إلى السطر السابق في الكود حيث تم تحديث slc4. لذا، الآن نأخذ في الاعتبار قيمة slc4 المعدلة. الآن، يحتوي slc4 على 4 عناصر بينما يحتوي slc1 على 9 عناصر. لذا، سيتم نسخ عدد العناصر الكلي 4.

مثال 2:

package main 
  
import "fmt"
  
func main() { 
  
    //لقطعة المصدر
    slice_1 := []string{"w3codeboxs", "for", "w3codeboxs", "GFG"} 
  
    //إنشاء لقطة الهدف باستخدام make func
    slice_2 := make([]string, 3) 
  
    //قبل النسخ
    fmt.Println("قطعة_1: ", slice_1) 
    fmt.Println("قطعة_2: ", slice_2) 
  
    //تسجيل قطعة_1 في قطعة_2
    Copy_1 := copy(slice_2, slice_1) 
    fmt.Println("\nقطعة_1: ", slice_1) 
    fmt.Println("قطعة_2: ", slice_2) 
    fmt.Println("عدد العناصر المكررة: ", Copy_1) 
  
        //نسخ اللقطعة
        //استخدام خاصية النسخ
        //يتضح من الكود
    Copy_2 := copy(slice_1, []string{"123w3codeboxs", "gfg"}) 
    fmt.Println("\nقطعة_1 : ", slice_1) 
    fmt.Println("عدد العناصر المكررة:", Copy_2)   
}

النتيجة:

قطعة_1:  [w3codeboxs for w3codeboxs GFG]
قطعة_2:  [  ]
قطعة_1:  [w3codeboxs for w3codeboxs GFG]
قطعة_2:  [w3codeboxs for w3codeboxs]
عدد العناصر المكررة:  3
قطعة_1:  [123w3codeboxs gfg w3codeboxs GFG]
عدد العناصر المكررة: 2