មេរៀនទី១១: Array និង Collection

មេរៀនទី១១: Array និង Collection

ក្នុងជំពូកនេះនឹងរៀនអំពីរបៀប:

– ប្រកាស Declare, initialize, copy និងប្រើអថេរ array

-ប្រកាស Declare, initialize, copy និងប្រើប្រភេទអថេរ collection ។

1. អ្វីដែលទៅដែលហៅថា  Array?

array គឺជាធាតុមួយដែលគ្រប់ធាតុទាំងអស់មានក្នុង array គឺជា

ប្រភេទដូចគ្នា (មិនដូច fields ក្នុង struct ឬ class ដែលមានភាពខុសគ្នា) ។ ធាតុនៃ array ដែលមានផ្ទុកក្នុងបណ្តុំនៃ memory និងត្រូវបានអនុញ្ញាតប្រើ ចំនួនគត់ integer (មិនដូច fields ក្នុង struct ឬ class ដែលត្រូវបានអនុញ្ញាត ដោយឈ្មោះ) ។ array គឺមានលក្ខណ:ពិសេសដែលប្រើប្រាស់កាលណា កម្មវិធី ត្រូវការ handle និងរៀបចំ group items ដូចគ្នាក្នុងករណីនេះវាមានភាពរលូន និងថាមពលខ្លាំងខ្លាដែលបង្កើតអថេរដោយផ្ទាល់ខ្លួនឯង ។

ការប្រកាសអថេរ Array

អ្នកប្រើស្តង់ដាប្រភេទឈ្មោះដើម្បីប្រកាស declare array មួយ ។ អ្នក ប្រកាស declare ប្រភេទ array មួយនៅខាងឆ្វេងដោយសរសេរឈ្មោះនៃធាតុ តាមគូរនៃសញ្ញា square brackets ។ សរសេរនៅក្នុងសញ្ញា square brackets ដែលអថេរ គឺជា array ។ ឧទាហរណ៍ ដើម្បីប្រកាស declare array មួយះថេរចំនួនគត់ int ដែលហៅថា pins អ្នកនឹងសរសេរដូចនេះ :

int[] pins; // Personal Identification Numbers

បង្កើត Array Instance

Array គឺជាប្រភេទ reference មិនមានប្រភេទតំលៃ ។ នេះមានន័យថាអថេរ array ទៅតាម array instance នៅលើ heap (ដូចជា អថេរ class តាមប្រភេទ object នៅលើ heap) ។ កាលណាអ្នកប្រកាស declare អថេរ array មួយអ្នកមិនបង្កើត array instance ទៀតទេ ។ កាលណាអ្នកប្រកាស declare អថេរ class មួយអ្នកមិនបង្កើត class instance ទៀតទេ ។ Arrays និង classes គឺជាប្រភេទ reference ។ ដើម្បី បង្កើត array instance អ្នកសរសេរពាក្យ គន្លឹះ new keyword តាមឈ្មោះ នៃប្រភេទ element តាមទំហំរបស់ array អ្នកកំពុងបង្កើតរវាសញ្ញា square brackets ។ ឧទាហរណ៍ ដើម្បីបង្កើត array ថ្មីនៃបួនចំនួនគត់ integers អ្នក សរសេរដូចនេះ:

pins = new int[4];

តាមពិតលទ្ធផល អ្នកប្រើការបង្កើតកន្សោម array បង្កើតងថ្មីភ្លាមៗ ពេលនោះ array instance និងបាត់បង់ ។ ខាងក្រោមនេះជាឧទាហរណ៍:

ខាងក្រោមនេះជា diagram ដែលបង្ហាញពីការប្រើ
a

ទំហំនៃ array instance មួយអាចគណនាក្នុងពេល run time ។ វាមិនត្រូវការ compile-time constant ឧទាហរណ៍ខាងក្រោមនេះបង្ហាញ:

int size = int.Parse(Console.ReadLine());

int[] pins = new int[size];

ចាប់ផ្តើមអថេរ Array

កាលណាអ្នកបង្កើត array instance មួយដែលគ្រប់ធាតុទាំងអស់នៃ array instance ត្រូវបានចាប់ផ្តើមទៅក្នុងតំលៃ default អាស្រ័យទៅលើ

ប្រភេទរបស់វា:

­ ប្រភេទចំនួនបានសង់រួចស្រេច (ដូចជា int) ត្រូវបានចាប់ផ្តើមទៅ 0 ។ ការរាប់ត្រូវបានចាប់ផ្តើមទៅ 0 ផងដែរ ។

­ បណ្តាធាតុ ​bool ត្រូវបានចាប់ផ្តើមទៅ false ។

­ បណ្តាប្រភេទធាតុ ​Reference ត្រូវបានចាប់ផ្តើមទៅ null ។

តំលៃមិនជាទូទៅរវាងគូរនៃសញ្ញាអង្កត់វង់ក្រចក ។ ឧទាហរណ៍ ដើម្បី ចាប់ផ្តើម pins ទៅ array នៃតំលៃ4អថេរចំនួនគត់ int ដែលមានតំលៃគឺ 9, 3, 7 និង 2 អ្នកនឹងសរសេរដូចនេះ:

int[] pins = new int[4]{9, 3, 7, 2 };

តំលៃរវាងសញ្ញាអង្កត់វង់ក្រចកមិនមែនថេរ constants អាចប្រែប្រួល វាអាចមានតំលៃដែលអាចគណនានៅពេល run time ដែលហៅថា methods, ដូចដែលបង្ហាញក្នុងឧទាហរណ៍ខាងក្រោមនេះ:

Random r = new Random();

int[] pins = new int[4]{ r.Next() % 10, r.Next() % 10,

r.Next() % 10, r.Next() % 10 };

ចំនួននៃតំលៃរវាងសញ្ញាអង្កត់វង់ក្រចកត្រូវតែពិតប្រាកដជាក់ច្បាស់ ទំហំនៃ array instance ចាប់ផ្តើមបង្កើត:

int[] pins = new int[3]{ 9, 3, 7, 2 }; // compile time error

int[] pins = new int[4]{ 9, 3, 7 }; // compile time error

int[] pins = new int[4]{ 9, 3, 7, 2 }; // okay

កាលណាអ្នកកំពុងចាប់ផ្តើមអថេរ array មួយអ្នកអាចប្រើ syntax នេះ: សរសេរសញ្ញាក្បៀសតំលៃរវាងសញ្ញាអង្កត់វង់ក្រចក ឧទាហរណ៍ជំនួស សរសេរនេះ:

int[] pins = { 9, 3, 7, 2 };

ទោះបីជាយ៉ាងណាក័ដោយ shortcut នេះគ្រាន់តែធ្វើការសំរាប់ចាប់

ផ្តើម array ។ ប្រសិនបើអ្នកកំពុងតែផ្តល់អថេរ declared array រួចរាល់:

int[] pins = { 9, 3, 7, 2 }; // okay

pins = { 9, 3,? 7,? 2? };//compile? ti

me error

pins = new int[4]{ 9, 3, 7, 2 }; //okay

អ្នកអាចចាប់ផ្តើមទៅ struct នីមួយៗក្នុង array នៃ structs ដែលហៅ struct constructor ដូចដែលបង្ហាញដូចខាងក្រោមនេះ:

int[] pins = { 9, 3, 7, 2 };

អនុញ្ញាតចូលធាតុរបស់ Array

ដើម្បីអនុញ្ញាតចូលធាតុរបស់ array អ្នកសរសេរឈ្មោះនៃអថេរ array បន្ទាប់មកប្រើចំនួនគត់ integer នៃធាតុនោះអ្នកកំពុងតែអនុញ្ញាតចូលរវាង

សញ្ញាគ្នាប square brackets ។  Array គឺគោល zero-based ។ ធាតុចាប់ ផ្តើមនៃ array ដែលមាននៅក្នុង zero ។ ឧទាហរណ៍ខាងក្រោមនេះជា array យោងតាម pins អ្នកនឹងសរសេរដូចនេះ:

int myPin;

myPin = pins[2];

អ្នកអាចប្រើកន្សោមនេះក្នុងពេលអាន read ឬសរសេរ write context. ឧទាហរណ៍:

myPin = 1645;

pins[2] = myPin;

គ្រប់ធាតុ array ទាំងអស់អនុញ្ញាត bounds-checked ។ ប្រសិនបើ អ្នកប្រើចំនួនគត់ integer ដែលតំលៃតូចបំផុតគឺ 0 ឬធំជាងឬស្មើប្រវែងរបស់ array ។ ពេល compiler នឹងបោះចោល IndexOutOfRangeException ដូច ឧទាហរណ៍ខាងក្រោមនេះ:

try

{

int[] pins = { 9, 3, 7, 2 };

Console.WriteLine(pins[4]); // error, the 4th element is at index 3

}

catch (IndexOutOfRangeException ex)

{

}

វើឡើងវិញដោយឆ្លងកាត់ Array

 អ្នកអាចធ្វើសារឡើងវិញដោយឆ្លងកាត់បណ្តាធាតុរបស់ array ដែល

ប្រើ statement ។ code ឧទាហរណ៍ខាងក្រោមនេះសរសេរពីតំលៃធាតុ array ទៅ console:

int[] pins = { 9, 3, 7, 2 };

for (int index = 0; index != pins.Length; index++)

{

int pin = pins[index];

Console.WriteLine(pin);

}

Copy ចំលង Array

Arrays គឺជាប្រភេទ reference ។ អថេរនៃ array មួយមានផ្ទុក reference មួយដើម្បីបង្កើត array instance ។ នេះមានន័យថាកាលណាអ្នក copy អថេរ array មួយអ្នកបញ្ចប់ជាមួយពីរ references ដែលយោងទៅតាម array instance ដូចគ្នាឧទាហរណ៍:

int[] pins = { 9, 3, 7, 2 };

foreach (int pin in pins)

{

Console.WriteLine(pin);

}

ប្រសិនបើអ្នកចង់បង្កើត copy នៃ array instance ដែលអថេរ array មួយយោងទៅតាមវា អ្នកធ្វើពីរបញ្ហា ។ ទីមួយ អ្នកត្រូវការបង្កើត array instance ថ្មីនៃប្រភេទដូចគ្នានិងប្រវែង array​ដូចគ្នាអ្នកកំពុង copy ដូចក្នុង ឧទាហរណ៍នេះ:

int[] pins = { 9, 3, 7, 2 };

int[] alias = pins; // alias and pins refer to the same array instance

ប៉ុន្តែបើអ្នកប្តូរប្រវែងដើមរបស់ array អ្នកត្រូវចាំថាប្តូរទំហំនៃ copy ផង ដែរ វាប្រសើជាងកំណត់ប្រវែងនៃ array មួយដោយប្រើប្រវែងរបស់វា បង្ហាញ

ក្នុងឧទាហរណ៍ខាងក្រោម:

int[] pins = { 9, 3, 7, 2 };

int[] copy = new int[4];

បណ្តាតំលៃខាងក្នុង copy ឥឡូវនេះបានចាប់ផ្តើមទាំងអស់ទៅក្នុង តំលៃ default នៃ 0 ។ បញ្ហាទីពីរអ្នកត្រូវការធ្វើគឺបង្កើតតំលៃខាងក្នុង array ថ្មី ទៅតំលៃដូចគ្នាក្នុង array ដើម ។ អ្នកនឹងអាចធ្វើដូចនេះដោយប្រើ statement, ដូចបង្ហាញក្នុងឧទាហរណ៍ខាងក្រោមនេះ:

int[] pins = { 9, 3, 7, 2 };

int[] copy = new int[pins.Length];

for (int i = 0; i != copy.Length; i++)

{

copy[i] = pins[i];

}

ដើម្បីចង្អុលបង្ហាញពីគោលការណ៍នេះនិងពិចារណាពីការប្រតិ្តបត្តិបង្កើត  creating និង copying ចំលង array មួយដែលប្រភេទធាតុគឺជារបស់វាខ្លួនឯង ប្រភេទ reference ។ ឧទាហរណ៍ខាងក្រោមនេះបង្កើត array មួយនៃ 4 triangles:

Triangle[] triangles = new Triangle[4];

ប្រសិនបើ Triangle គឺជា class មួយដែលតួនាតី array instance ចាប់ផ្តើមក្នុងធាតុនីមួយៗគឺត្រូវបានចាប់ផ្តើមទៅ null ។ ម្យ៉ាងទៀត diagram statement ពីមុនមើលឃើញដូចនេះ ។
aឧបមាថាអ្នកបំពេញ triangles array ជាមួយ 4 Triangle objects ថ្មី ដែលមានដូចនេះ:

Triangle[] triangles = new Triangle[4];

for (int i = 0; i != triangles.Length; i++)

{

triangles[i] = new Triangle();

}

diagram នៃឧទាហរណ៍មានដូចខាងក្រោមនេះ:
aចុងក្រោយ ឧបមាថាអ្នកឥឡូវនេះបង្កើត copy មួយនៃ triangles array ដូចជា:

Triangle[] copy = new Triangle[triangles.Length];

for (int i = 0; i != copy.Length; i++)

{

copy[i] = triangles[i];

}

diagram នៃឧទាហរណ៍មានដូចខាងក្រោមនេះ:
a

ប្រើ System.Array Class

ហេតុអ្វីបានជាប្រភេទ int គឺជាប្រភេទតំលៃ; គ្រប់ structs ទាំងអស់គឺ ជាប្រភេទតំលៃ ។ ឧទាហរណ៍:

string rep = 42.ToString();

System.Array class ផ្គត់ផ្គង់ប្រវែងគ្រប់ arrays ទាំងអស់ ។ ម្យ៉ាងទៀត មិនមានភាពខុសគ្នារវាងពីរ statements:

int[] pips = new int[4]{ 9, 3, 7, 2 };

Array pips = new int[4]{ 9, 3, 7, 2 };

ទោះបីអ្នកបានឃើញ Array class ក្នុង code ។ ក្នុងគោលបំណង នាំប្រភេទ array ទាំងអស់ទៅក្នុងភាសារួមមួយ common language runtime (CLR) ។ ការចាប់ផ្តើមប្រើប្រាស់ shortcut មិនអាចធ្វើបានកាលណា ចាប់ផ្តើមអថេរ array មួយ :

int[] pips = { 9, 3, 7, 2};//okay

Array pips = { 9, 7, 3, 2};//compile time error

ឧទាហរណ៍កាលណាសរសេរ statement មួយទៅក្នុងធាតុ copy ក្នុង array មួយទៅ array ផ្សេងទៀត ។ អ្នកអាចប្រើ System.Array instance method ដែលហៅថា CopyTo ដែល copy ចំលងមាតិកានៃ array មួយទៅ

ក្នុង array ផ្សេងទៀត:

int[]pins = { 9, 3, 7, 2 };

int[]copy = new int[pins.Length];

pins.CopyTo(copy, 0);

មធ្យោបាយផ្សេងទៀតដើម្បី copy តំលៃទៅប្រើក្នុង System.Array static method ដែលហៅថា Copy ។ ដូចជាមួយ CopyTo  កំណត់ array ជាមុនពេលចាប់ផ្តើម Copy បង្កើត:

int[] pins = { 9, 3, 7, 2 };

int[] copy = new int[pins.Length];

Array.Copy(pins, copy, copy.Length);

ម្យ៉ាងទៀតដើម្បីផ្លាស់ប្តូរ System.Array instance method ហៅថា Clone ដែលអាចប្រើសំរាប់បង្កើត array ទាំងមូលនិង copy វាដើម្បីធ្វើ

សកម្មភាព:

int[] pins = { 9, 3, 7, 2 };

int[] copy = (int[])pins.Clone();

2. អ្វីទៅដែលហៅថា Collection Classes?

Arrays គឺជាមធ្យោយបាយតែមួយគត់ដើម្បីប្រមូលធាតុនៃប្រភេទដូចគ្នា ក្នុងកម្មធី Microsoft .NET Framework មាន namespace ដែលហៅថា System.Collections ដែលផ្ទុកច្រើនរាប់មិនអស់ classes ដែលមានមុខងារ សំរាប់ប្រមូលធាតុរួមទាំងអស់ ។ បណ្តា class ទាំងនេះផ្គត់ផ្គង់បង្កើតដំណោះ

ស្រាយរួចជាស្រេចគ្រប់ស្ថានភាព កាលណាអ្នកត្រូវការប្រមូលផ្តុំធាតុ ។

គ្រប់ collection classes ទាំងអស់អនុញ្ញាត  ដាក់និងត្រឡប់ចូល

ទៅក្នុងធាតុ របស់គេដូចជា object ។ ប្រភេទធាតុនេះគឺជាការប្រមូលផ្តុំនៃ class ដែល តែងតែមាន object (System.Object) ។
aអ្នកអាចបន្ថែមតំលៃចំនួនគត់ integer ទៅក្នុង array នេះ (តាមពិត អ្នកអាចបន្ថែមតំលៃនៃប្រភេទទៅអោយវា) ។ កាលណាអ្នកបន្ថែមចំនួនគត់មួយ វា automatically មាននៅក្នុងប្រអប់និងធាតុ array (object reference) យោងតាមប្រអប់ copy ដែលមានតំលៃចំនួនគត់ integer (សំរាប់សំណល់

សេសសស់ក្នុងប្រអប់) ។ ខាងក្រោមនេះគឺបង្ហាញពី diagram ។
a

បញ្ជី ArrayList

ArrayList គឺជាជំនួយ class សំរាប់ធាតុដែលនៅក្នុង array ។ អ្នកអាចធ្វើការគត់ចំណាំថាកាលណាកាត់បន្ថយ array:

¡ ប្រសិនបើអ្នកចង់ resize ទំហំ array ឡើងវិញអ្នកបង្កើត array ថ្មី រួច copy បណ្តាធាតុ (array ថ្មីគឺមានទំហំតូចជាង) រួចហើយ update array references ។

¡ ប្រសិនបើអ្នកចង់ប្តូរ remove ធាតុមួយពី array អ្នកបង្កើត copy មួយនៃធាតុរួចហើយបញ្ចូលទាំងអស់ទៅកន្លែងមួយ ។

¡ ប្រសិនបើអ្នកចង់បានបញ្ចូលធាតុមួយទៅក្នុង array អ្នកបញ្ចូលធាតុ

ទៅខាងក្រោមកន្លែងមួយដើម្បីបង្កើត free slot ។

¡ អ្នកអាច remove ធាតុមូយពី ArrayList ដោយប្រើ Remove method ។

¡ អ្នកអាចបន្ថែមធាតុមួយចុងបញ្ចប់នៃ ArrayList ដោយប្រើវា Add method ។ អ្នកគ្រាន់តែអនុវត្តធាតុដែលបានបន្ថែម ។ ArrayList ដឹងថាវាជា ប្រវែងកម្មសិទ្ធិនិង resize ទំហំដោយខ្លួនវាផ្ទាល់ប្រសិនបើចាំបាច់ ។

¡ អ្នកអាចបញ្ចូលធាតុទៅក្នុងពាក់កណ្តាលនៃ ArrayList ដោយប្រើ Insert method ។  ArrayList នឹង resize ទំហំរបស់វាឡើងវិញ ប្រសិនបើ ចាំបាច់ ឧទាហរណ៍ខាងក្រោមបង្ហាញពីរបៀបប្រើ ArrayList ដើម្បីសរសេរ ចំនួន 10 ឆ្លងទៅ 1 ទៅក្នុងសន្លឹក console:

using System;

using System.Collections;

ArrayList numbers = new ArrayList();

// fill the ArrayList

foreach (int number in new int[12]{10,9,8,7,7,6,5,10,4,3,2,1})

{

numbers.Add(number);

}

// remove first element whose value is 7 (the 4th element, index 3)

numbers.Remove(7);

// remove the element that’s now the 7th element, index 6 (10)

numbers.RemoveAt(6);

// iterate remaining 10 elements using a for statement

for (int i = 0; i != numbers.Count; i++)

{

int number = (int)numbers[i]; // Notice the cast

Console.WriteLine(number);

}

// iterate remaining 10 using a foreach statement

foreach (int number in numbers) // No cast needed

{

Console.WriteLine(number);

}

លទ្ធផលនៃកម្មវិធីនេះ

10

9

8

7

6

5

4

3

2

1

10

9

8

7

6

5

4

3

2

1

Queue

Queue class អនុវត្តក្នុងការប្រមូលផ្តុំ classic first-in first-out (FIFO) ។ ធាតុចូលរួម queue នៅពីក្រោយ (Enqueue) រួចហើយចាក

ចេញពី queue នៅពីមុខ (Dequeue) ។ ដូចជាមួយ ArrayList អ្នកត្រូវបាន បំពេញត្រួតពិនិត្យកន្លែងធាតុនៅខាងក្នុង Queue ។

ទីនេះជាឧទាហរណ៍នៃ queue ធ្វើប្រតិ្តបត្តិការណ៍:

using System;

using System.Collections;

Queue numbers = new Queue();

// fill the queue

foreach (int number in new int[4]{9, 3, 7, 2})

{

numbers.Enqueue(number);

Console.WriteLine(number + ” has joined the queue”);

}

// iterate through the queue

foreach (int number in numbers)

{

Console.WriteLine(number);

}

// empty the queue

while (numbers.Count != 0)

{

int number = (int)numbers.Dequeue();

Console.WriteLine(number + ” has left the queue”);

}

លទ្ធផលរបស់កម្មវិធីនេះ:

9 has joined the queue

3 has joined the queue

7 has joined the queue

2 has joined the queue

9

3

7

2

9 has left the queue

3 has left the queue

7 has left the queue

2 has left the queue

Stack Class

Stack class អនុវត្តក្នុងការប្រមូលផ្តុំ last-in first-out (LIFO) ។ ធាតុចូលរួម stack នៅខាងលើ top (Push) និងចាកចេញ stack នៅលើ top (Pop) ។

using System;

using System.Collections;

Stack numbers = new Stack();

// fill the stack

foreach (int number in new int[4]{9, 3, 7, 2})

{

numbers.Push(number);

Console.WriteLine(number + ” has been pushed on the stack”);

}

// iterate through the stack

foreach (int number in numbers)

{

Console.WriteLine(number);

}

// empty the stack

while (numbers.Count != 0)

{

int number = (int)numbers.Pop();

Console.WriteLine(number + “has been popped off the stack”);

}

លទ្ធផលរបស់កម្មវិធីនេះ:

9 has been pushed on the stack

3 has been pushed on the stack

7 has been pushed on the stack

2 has been pushed on the stack

2

7

3

9

2 has been popped off the stack

7 has been popped off the stack

3 has been popped off the stack

9 has been popped off the stack

Hashtable Class

using System;

using System.Collections;

Hashtable ages = new Hashtable();

// fill the SortedList

ages[“John”] = 41;

ages[“Diana”] = 42;

ages[“James”] = 13;

ages[“Francesca”] = 11;

// iterate using a foreach statement

// the iterator generates a DictionaryEntry object containing a key/value

pair

foreach (DictionaryEntry element in ages)

{

string name = (string)element.Key;

int age = (int)element.Value;

Console.WriteLine(“Name: {0}, Age: {1}”, name, age);

}

 លទ្ធផលរបស់កម្មវិធីនេះ:

Name: James, Age: 13

Name: John, Age: 41

Name: Francesca, Age: 11

Name: Diana, Age: 42

The SortedList Class

SortedList

array និងប្រភេទ ArrayList ជាមធ្យោបាយផ្តល់ទៅអោយទីតាំងនៃ ចំនួនគត់ integer index ទៅក្នុងធាតុ អ្នកផ្គត់ផ្គង់ចំនួនគត់ integer នៅក្នុង សញ្ញាគ្នាប square brackets (ឧទាហរណ៍ [4]) ក្នុងភាសាផ្សេងទៀតតែងតែ

ប្រមូលផ្តុំ array ។ SortedList class ផ្គត់ផ្គង់មុខងារដោយរក្សាទុកពីរ object arrays មួយសំរាប់ keys ដែលអ្នកកំពុងមើលពីមួយសំរាប់តំលៃដែលអ្នកកំពុង

បង្ហាញ។ keys array គឺជាមធ្យោបាយចែកចេញ (ដែលហៅថា SortedList)។

កាលណាអ្នកបញ្ចូលគូរ key/value ទៅក្នុង SortedList មួយ key ត្រូវបានបញ្ចូលទៅក្នុង keys array ក្នុងពេលកែតំរូវ index ដើម្បីរក្សាទុក keys array ។ តំលៃដែលបានបញ្ចូលក្នុងតំលៃ array នៅពេល index ដូចគ្នា  នេះមានន័យថាអ្នកអាចបញ្ចូល key/value ទៅក្នុង SortedList ។ មានសារ:សំខាន់សំរាប់ design:

¡ ភាពខុសគ្នាទៅ collection class ផ្សេងទៀត អ្នកមិនអាចត្រួត ពិនិត្យកន្លែងធាតុស្ថិតនៅក្នុង SortedList មួយ ។

¡ SortedList មិនអាចផ្ទុក duplicate key ។ ប្រសិនបើអ្នកហៅ Add method បន្ថែម key មួយដែលបង្ហាញរួចស្រេចក្នុង key array អ្នកនឹង ទទួលបាន exception មួយ ។ ទោះបីជាអ្នកប្រើសញ្ញាគ្នាប square

bracket កំណត់បន្ថែម key/value (មើលក្នុងឧទាហរណ៍ខាងក្រោម)។

¡ កាលណាអ្នកប្រើសំរាប់ statement នីមួយៗដើម្បីធ្វើឡើងវិញដោយ

ឆ្លងកាត់ SortedList អ្នកទទួលក្រោយពី DictionaryEntry ។

នេះជាឧទាហរណ៍មានសារ:សំខាន់:

using System;

using System.Collections;

SortedList ages = new SortedList();

// fill the SortedList

ages[“John”] = 39;

ages[“Diana”] = 40;

ages[“James”] = 12;

ages[“Francesca”] = 10;

// iterate using a foreach statement

// the iterator generates a DictionaryEntry object containing a key/value

pair

foreach (DictionaryEntry element in ages)

{

string name = (string)element.Key;

int age = (int)element.Value;

Console.WriteLine(“Name: {0}, Age: {1}”, name, age);

}

លទ្ធផលកម្មវិធីនេះគឺ:

Name: Diana, Age: 40

Name: Francesca, Age: 10

Name: James, Age: 12

Name: John, Age: 39

ប្រើ Collection Class ទៅ Play Card

មាន 52 cards ក្នុងប្រអប់ នេះគឺពិតប៉ុន្តែវាមើលមិនឃើញ card នឹងមិននៅក្នុងហ៊ូពីព្រោះវានឹងត្រូវបានចែក ប្រសិនបើអ្នកប្រើ array មួយ អ្នកនឹង record មាន array ប៉ុន្មានពិតនៅក្នុង PlayingCard ។ អ្នកនឹងសិក្សា code រួចសរសេរពីរ method: ទីមួយសាប់ប៊ៀក្នុងហ៊ូនិងមួយទៀត ដកប៊ៀ ពីក្នុងដៃទៅក្នុងហ៊ូ ។

ចែកប៊ៀ Deal the card

1. ចាប់ផ្តើមចូលក្នុង Microsoft Visual Studio .NET

2. បើក Aggregates project ទីតាំងក្នុង \MicrosoftPress\Visual C# Step by Step\Chapter 10\Aggregates folder ក្នុង My Documents folder របស់អ្នក ។ ពេលនោះ Aggregates project បានបើកឡើង ។

3. នៅលើ Debug menu ចុចលើ Start Without Debugging ។ Visual Studio .NET builds និងរត់ដំណើរការកម្មវិធី ។ Windows form មើលឃើញសន្លឹកប៊ៀក្នុងដៃនៃអ្នកលេងទាំងបួន (ជើង, ត្បូង, កើត, និងលិច) ។ មានពីរប៊ូតុង: មួយសំរាប់ចែកប៊ៀនិងមួយទៀតបក

ត្រឡប់ពីក្នុងហ៊ូ ។

4. ចុចលើ Deal នៅលើសន្លឹក Windows form ។ ប៊ៀ 52 សន្លឹកនៅ ក្នុងហ៊ូត្រូវបានចែកទៅក្នុងដៃអ្នកលេងទាំងបួនគឺ 13 សន្លឹកក្នុងដៃ

នីមួយៗ ។