Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C#

วิธีสร้างสำเนาลึกของ ArrayList ใน C#

ภาพรวม

เมธอด Clone() ของ ArrayList สร้าง shallow copy (สำเนาลึก) หมายถึงอาร์เรย์ใหม่อ้างอิงออบเจ็กต์เดิม (สำหรับ reference type) สำหรับ value type จะคัดลอกค่า

ตัวอย่าง 1: Clone ArrayList สตริง

using System;
using System.Collections;

public class Demo {
    public static void Main() {
        ArrayList list = new ArrayList();
        list.Add("One");
        list.Add("Two");
        list.Add("Three");
        list.Add("Four");
        list.Add("Five");
        list.Add("Six");
        list.Add("Seven");
        list.Add("Eight");

        Console.WriteLine("ArrayList elements...");
        foreach (string str in list) {
            Console.WriteLine(str);
        }

        Console.WriteLine("ArrayList is read-only? = " + list.IsReadOnly);
        Console.WriteLine("Does the element Six in the ArrayList? = " + list.Contains("Six"));

        list.Insert(4, "Twelve");
        Console.WriteLine("\nArrayList elements...UPDATED");
        foreach (string str in list) {
            Console.WriteLine(str);
        }

        ArrayList list2 = new ArrayList();
        list2 = (ArrayList)list.Clone();

        Console.WriteLine("\nCloned ArrayList...");
        foreach (string str in list2) {
            Console.WriteLine(str);
        }
    }
}

ผลลัพธ์ตัวอย่าง 1

ArrayList elements...
One
Two
Three
Four
Five
Six
Seven
Eight
ArrayList is read-only? = False
Does the element Six in the ArrayList? = True
ArrayList elements...UPDATED
One
Two
Three
Four
Twelve
Five
Six
Seven
Eight
Cloned ArrayList...
One
Two
Three
Four
Twelve
Five
Six
Seven
Eight

ตัวอย่าง 2: Clone หลังลบสมาชิก

using System;
using System.Collections;

public class Demo {
    public static void Main(String[] args) {
        ArrayList list1 = new ArrayList();
        list1.Add("A");
        list1.Add("B");
        list1.Add("C");
        list1.Add("D");
        list1.Add("E");
        list1.Add("F");
        list1.Add("G");
        list1.Add("H");
        list1.Add("I");

        Console.WriteLine("Elements in ArrayList1...");
        foreach (string res in list1) {
            Console.WriteLine(res);
        }

        ArrayList list2 = new ArrayList();
        list2.Add("A");
        list2.Add("B");
        list2.Add("C");
        list2.Add("D");
        list2.Add("E");
        list2.Add("F");
        list2.Add("G");
        list2.Add("H");
        list2.Add("I");
        list2.Add("G");
        list2.Add("I");

        Console.WriteLine("Elements in ArrayList2...");
        foreach (string res in list2) {
            Console.WriteLine(res);
        }

        Console.WriteLine("Count of elements in ArrayList2 = " + list2.Count);
        list2.Remove("G");
        Console.WriteLine("Elements in ArrayList2... (UPDATED)");
        foreach (string res in list2) {
            Console.WriteLine(res);
        }
        Console.WriteLine("Count of elements in ArrayList2 (Updated) = " + list2.Count);

        ArrayList list3 = new ArrayList();
        list3 = (ArrayList)list2.Clone();

        Console.WriteLine("\nCloned ArrayList from ArrayList2...");
        foreach (string str in list3) {
            Console.WriteLine(str);
        }
    }
}

ผลลัพธ์ตัวอย่าง 2

Elements in ArrayList1...
A
B
C
D
E
F
G
H
I
Elements in ArrayList2...
A
B
C
D
E
F
G
H
I
G
I
Count of elements in ArrayList2 = 11
Elements in ArrayList2... (UPDATED)
A
B
C
D
E
F
H
I
G
I
Count of elements in ArrayList2 (Updated) = 10
Cloned ArrayList from ArrayList2...
A
B
C
D
E
F
H
I
G
I

สรุป

  • Clone() สร้าง ArrayList ใหม่ คัดลอกอ้างอิง (shallow)
  • สำหรับ string (immutable) ทำงานเหมือน deep copy
  • ใช้ IsReadOnly, Contains(), Insert(), Remove() จัดการข้อมูล