Các danh sách collection xây dựng sẵn trong C#
C# cung cấp các lớp collection trong không gian tên System.Collections hay System.Collections.Generic, là các cấu trúc lưu trữ dữ liệu khác nhau.
ArrayList và List
ArrayList là lớp thuộc không gian tên System.Collections, trong khi List
- Khởi tạo một đối tượng kiểu ArrayList hay List
ArrayList list = new ArrayList();
List<KiểuDữLiệu> list = new List<KiểuDữLiệu>();
- Truy cập phần tử thứ i: list[i] với chỉ số i bắt đầu từ 0
- int Add(object value): bổ sung phần tử value, trả về vị trí phần tử thêm vào
- void Insert(int index, object value): chèn một phần tử value tại vị trí index
- void RemoveAt(int index): xóa phần tử tại vị trí index
- void Remove(object value): xóa phần tử value trong ArrayList
- void RemoveRange(int index, int count): xóa một dãy count phần tử kể từ vị trí index
- void Clear(): xóa tất cả các phần tử trong ArrayList
- bool Contains(object value): kiểm tra phần tử có trong ArrayList, nếu có trả về true
- void Sort(): sắp xếp các phần tử trong ArrayList
- int IndexOf(object value), int IndexOf(object value, int startIndex),
int IndexOf(object value, int startIndex, int count):
trả về chỉ số của phần tử value trong count phần tử của ArrayList, kể từ vị trí startIndex, nếu không tìm thấy trả về -1
- int BinarySearch(object value): tìm kiếm nhị phân trong danh sách đã sắp xếp
int BinarySearch(int startIndex, int count, object value)
- int Count: trả về số phần tử có trong ArrayList hay List
- int Capacity: thiết lập hay trả về số phần tử có thể chứa trong ArrayList
- bool IsFixedSize: trả về giá trị chỉ rõ ArrayList có kích thước cố định hay không
Ví dụ:
using System;
using System.Collections;
class ViDu
{
static void Main()
{
ArrayList list = new ArrayList();
list.Add(3);
list.Add(2);
list.Insert(1, 6);
list.Remove(3);
for (int i = 0; i < list.Count; i++)
Console.WriteLine(list[i].ToString());
}
}
Hashtable
Hashtable là lớp thuộc không gian tên System.Collections, biểu diễn một bảng băm, là danh sách các cặp phần tử và khóa liên kết phần tử này.
- Khởi tạo đối tượng Hashtable:
Hashtable h = new Hashtable();
- Truy cập phần tử thứ key: h[key]
- void Add(object key, object value): thêm một cặp phần tử value, khóa key vào Hashtable, mỗi phần tử tương ứng với khóa
- bool ContainsKey(object key) hay bool Contains(object key): kiểm tra khóa key có trong Hashtable chưa, nếu có phương thức trả về true
- bool ContainsValue(object value): kiểm tra phần tử có trong Hashtable chưa, nếu có phương thức trả về true
- void Remove(object key): xóa cặp khóa và phần tử tương ứng trong Hashtable
- ICollection Keys: trả về một ICollection chứa các khóa trong Hashtable
- ICollection Values: trả về một ICollection chứa các giá trị trong Hashtable
Ví dụ:
using System;
using System.Collections;
class ViDu
{
static void Main()
{
Hashtable weeks = new Hashtable();
weeks.Add("1", "Sunday");
weeks.Add("2", "Monday");
weeks.Add("3", "Tuesday");
Console.WriteLine(weeks["2"].ToString());
if (weeks.ContainsValue("Tuesday"))
Console.WriteLine( ("Tim thay");
else Console.WriteLine( ("Khong tim thay");
weeks.Remove("3");
foreach (DictionaryEntry day in weeks)
Console.WriteLine( (day.Key + " - " + day.Value);
}
}
SortedList và SortedList
SortedList là lớp thuộc không gian tên System.Collections, trong khi SortedList
Mỗi cặp phần tử và khóa trong SortedList có kiểu struct KeyValuePair<TKey, TValue>, chứa thuộc tính Key trả về khóa và Value trả về giá trị của phần tử.
- Khởi tạo một đối tượng kiểu SortedList hay SortedList
SortedList list = new SortedList();
SortedList<TKey, TValue> list = new SortedList<TKey, TValue>();
- Truy cập phần tử thứ key: list[key]
- void Add(object key, object value): bổ sung phần tử value với khóa key
- void RemoveAt(int index): xóa phần tử tại vị trí index
- bool Remove(object key): xóa phần tử với khóa key
- int IndexOfValue(object value): tìm giá trị value, trả về vị trí tìm thấy, nếu không tìm thấy trả về -1
- int IndexOfKey(object key): tìm khóa key, trả về vị trí tìm thấy, nếu không tìm thấy trả về -1
- bool ContainsKey(object key): kiểm tra danh sách có chứa khóa key không, nếu có trả về true
- bool ContainsValue(object value): kiểm tra danh sách có chứa giá trị value không, nếu có trả về true
- bool TryGetValue(object key, out object value): trả về giá trị kết hợp với khóa key trong biến value, nếu tìm thấy trả về true
Ví dụ:
using System;
using System.Collections.Generic;
class Program
{
static void Main(string[] args)
{
SortedList
sorted.Add("Hoa", 9);
sorted.Add("Xuan", 7);
sorted.Add("Dong", 8);
bool contain1 = sorted.ContainsKey("Xuan");
Console.WriteLine("Danh sach co Xuan: " + contain1);
int value;
if (sorted.TryGetValue("Dong", out value))
Console.WriteLine("Gia tri co khoa Dong la " + value);
foreach (var pair in sorted)
Console.WriteLine(pair.Key +"-"+pair.Value);
int index = sorted.IndexOfValue(8);
Console.WriteLine("Vi tri cua diem 8: " + index);
}
}
Dictionary
Dictionary là lớp thuộc không gian tên System.Collections.Generic, biểu diễn một danh sách các cặp phần tử và khóa liên kết với phần tử này tương tự Hashtable. Kiểu dữ liệu của key và value có thể là bất kỳ kiểu cơ sở, string, mảng, kiểu liệt kê, hay struct. Mỗi cặp phần tử và khóa trong Dictionary có kiểu struct KeyValuePair<TKey, TValue>, chứa thuộc tính Key trả về khóa và Value trả về giá trị của phần tử.
- Khởi tạo đối tượng Dictionary
Dictionary<TKey, TValue> dict = new Dictionary<TKey, TValue>();
- Truy cập phần tử thứ key: dict[key]
- void Add(object key, object value): thêm một cặp phần tử value, khóa key vào Dictionary, mỗi phần tử tương ứng với khóa
- bool ContainsKey(object key): kiểm tra khóa có trong Dictionary chưa, nếu có phương thức trả về true
- bool ContainsValue(object value): kiểm tra phần tử có trong Dictionary chưa, nếu có phương thức trả về true
- bool Remove(object key): xóa cặp khóa và phần tử tương ứng, trả về true nếu tồn tại cặp khóa và phần tử, ngược lại trả về false
Ví dụ:
using System;
using System.Collections.Generic;
class ViDu
{
static void Main()
{
Dictionary
colorStrings.Add(Color.Blue, Color.Blue.ToString());
colorStrings.Add(Color.Red, Color.Red.ToString());
foreach (KeyValuePair
Console.WriteLine(color.Key.GetBrightness().ToString()+ " " +
color.Value);
}
}
NameValueCollection
NameValueCollection là lớp thuộc không gian tên System.Collections.Specialized, biểu diễn một danh sách các cặp chuỗi và tên liên kết với chuỗi này tương tự Hashtable. Các chuỗi có thể truy cập bởi tên hay chỉ số. NameValueCollection có thể lưu nhiều chuỗi kết hợp với một tên.
- Khởi tạo đối tượng NameValueCollection:
NameValueCollection pair = new NameValueCollection();
- Truy cập phần tử với tên: pair[name]
hay truy cập phần tử thứ index: pair[index]
- void Add(string name, string value): thêm một cặp chuỗi value và tên name vào NameValueCollection
- void Remove(string name): xóa chuỗi tương ứng tên name
- string[] GetValues(int index): trả về một mảng các chuỗi tại vị trí index
- string Get(int index): trả về chuỗi chứa danh sách các chuỗi tại vị trí index cách nhau dấu phẩy
- string GetKey(int index): trả về tên liên kết với chuỗi tại vị trí index
- string[] AllKeys: trả về mảng tất cả các khóa trong danh sách
Ví dụ:
using System;
using System.Collections.Specialized;
class ViDu
{
static void Main()
{
NameValueCollection markStatus = new NameValueCollection();
markStatus.Add("High", "80");
markStatus.Add("High", "60");
markStatus.Add("Pass", "40");
foreach (string key in markStatus.Keys)
{
string[] values = markStatus.GetValues(key);
foreach (string value in values)
Console.WriteLine (key + " - " + value);
}
}
}
Stack và Stack
Stack là lớp thuộc không gian tên System.Collections, trong khi Stack
- Khởi tạo một đối tượng Stack
Stack stack = new Stack();
Stack<KiểuPhầnTử> stack = new Stack<KiểuPhầnTử>();
- void Push(object value): thêm một phần tử vào đỉnh ngăn xếp
- object Pop(): lấy một phần tử từ đỉnh ngăn xếp
- bool Contains(object value): kiểm tra giá trị có trong ngăn xếp không, nếu có trả về true
- object Peek(): trả về một phần tử ở đỉnh của ngăn xếp mà không xóa nó
Ví dụ:
using System;
using System.Collections.Generic;
class ViDu
{
static void Main()
{
Stack
days.Push("Sunday");
days.Push("Monday");
days.Push("Tuesday");
days.Push("Wednesday");
days.Push("Thursday");
days.Push("Friday");
days.Push("Saturday");
if (days.Count == 7)
Console.WriteLine(days.Pop().ToString());
else Console.WriteLine("Saturday does not exist");
}
}
Queue và Queue
Queue là lớp thuộc không gian tên System.Collections, trong khi Queue
- Khởi tạo một đối tượng Queue
Queue<KiểuPhầnTử> queue = new Queue<KiểuPhầnTử>();
- void Enqueue(object value): thêm một phần tử vào cuối hàng đợi
- object Dequeue(object value): lấy một phần tử ở đầu hàng đợi
- object Peek(): trả về phần tử ở đầu hàng đợi
- bool Contains(object value): kiểm tra giá trị có trong hàng đợi không, nếu có trả về true
LinkedList
LinkedList là lớp thuộc không gian tên System.Collections.Generic, biểu diễn một danh sách liên kết đôi, gồm danh sách các node liên kết với nhau bởi thành phần tham chiếu đến node kế tiếp và kế trước của mỗi node.
- Khởi tạo một đối tượng LinkedList
LinkedList<KiểuPhầnTử> list = new LinkedList<KiểuPhầnTử>();
- void AddAfter(LinkedListNode
- void AddAfter(LinkedListNode
- void AddBefore(LinkedListNode
- void AddBefore(LinkedListNode
- void AddFirst(int value): thêm node có giá trị value vào đầu danh sách
- void AddFirst(LinkedListNode
- void AddLast(int value): thêm node có giá trị value vào cuối danh sách
- void AddLast(LinkedListNode
- bool Contains(int value): kiểm tra giá trị có trong danh sách không
- LinkedListNode
- LinkedListNode
- bool Remove(int value): xóa node có giá trị value trong danh sách
- void Remove(LinkedListNode
- void RemoveFirst(): xóa node đầu tiên trong danh sách
- void RemoveLast(): xóa node cuối cùng trong danh sách
- LinkedListNode
- LinkedListNode
- Mỗi node trong danh sách có kiểu LinkedListNode
LinkedListNode
LinkedListNode
T Value: trả về giá trị của node
Ví dụ:
using System;
using System.Collections.Generic;
class ViDu
{
static void Main()
{
LinkedList
list.AddLast(2);
list.AddFirst(1);
LinkedListNode
while (node != null)
{
Console.WriteLine(node.Value.ToString());
node = node.Next;
}
}
}
HashSet
HashSet là lớp thuộc không gian tên System.Collections.Generic, biểu diễn một tập hợp các phần tử không trùng nhau. .Net 4 bổ sung SortedSet
- Khởi tạo một đối tượng HashSet
HashSet<KiểuPhầnTử> set = new HashSet<KiểuPhầnTử>();
Có thể khởi tạo một HashSet từ một Collection khác
string[] arr = { "cat", "dog", "cat", "leopard", "tiger", "cat" };
HashSet
Có thể khi khởi tạo HashSet, quy định cách thức so sánh phần tử trùng nhau
HashSet
Với Compare là lớp cài đặt giao tiếp IEqualityComparer
- bool Add(object item): thêm một phần tử vào HashSet
- bool Remove(object item): xóa phần tử item từ HashSet
- bool Contains(object item): kiểm tra HashSet có chứa giá trị item, nếu có trả về true
- void CopyTo(object[] array): sao chép HashSet đến mảng array
Ví dụ:
using System;
using System.Collections.Generic;
class Program
{
static void Main(string[] args)
{
HashSet
hash.Add("1.Hoa");
hash.Add("2.Lan");
hash.Add("3.Thu");
string[] arr = new string[3];
hash.CopyTo(arr);
Console.WriteLine(string.Join(",", arr));
}
}
class Compare : IEqualityComparer
{
public bool Equals(string a, string b)
{
if (GetHashCode(a) == GetHashCode(b))
return true;
return false;
}
public int GetHashCode(string a)
{
return int.Parse(a.Substring(0, a.IndexOf('.') ));
}
}