Thao tác Dữ liệu phần 4

Chia sẻ: Nghia Bui Tuan | Ngày: | Loại File: PDF | Số trang:5

0
55
lượt xem
6
download

Thao tác Dữ liệu phần 4

Mô tả tài liệu
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Phương thức Parse linh hoạt và có thể tự sửa lỗi. Tuy nhiên, mức độ linh hoạt này không cần thiết trong trường hợp bạn muốn bảo đảm các chuỗi phải theo một định dạng nhất định.

Chủ đề:
Lưu

Nội dung Text: Thao tác Dữ liệu phần 4

  1. Phương thức Parse linh hoạt và có thể tự sửa lỗi. Tuy nhiên, mức độ linh hoạt này không cần thiết trong trường hợp bạn muốn bảo đảm các chuỗi phải theo một định dạng nhất định. Khi đó, sử dụng phương thức ParseExact thay cho Parse. Dạng đơn giản nhất của ParseExact nhận ba đối số: chuỗi chứa ngày giờ, chuỗi định dạng xác định cấu trúc mà chuỗi chứa ngày giờ phải tuân theo, và một tham chiếu IFormatProvider cung cấp thông tin đặc thù về bản địa. Nếu IFormatProvider là null, thông tin về bản địa của tiểu trình (thread) hiện hành sẽ được sử dụng. Nếu ngày giờ trong chuỗi đang xét không đúng với định dạng quy định, ParseExact sẽ ném ngoại lệ System.FormatException. Chuỗi định dạng được sử dụng tương tự như khi bạn chỉ định chuỗi đại diện cho một đối tượng DateTime. Điều này có nghĩa là bạn có thể sử dụng cả định dạng chuẩn lẫn định dạng tùy biến. Tham khảo phần tài liệu cho lớp System.Globalization.DateTimeFormatInfo trong tài liệu .NET Framework SDK để có thông tin đầy đủ về tất cả các kiểu định dạng. // Chỉ phân tích các chuỗi chứa LongTimePattern. DateTime dt6 = DateTime.ParseExact("2:13:30 PM", "h:mm:ss tt", null); // Chỉ phân tích các chuỗi chứa RFC1123Pattern. DateTime dt7 = DateTime.ParseExact( "Sun, 05 Sep 2004 14:13:30 GMT", "ddd, dd MMM yyyy HH':'mm':'ss 'GMT'", null); // Chỉ phân tích các chuỗi chứa MonthDayPattern. DateTime dt8 = DateTime.ParseExact("September 03", "MMMM dd", null); 1.1 Cộng, trừ, so sánh ngày giờ Bạn cần thực hiện các phép tính số học cơ bản hay phép so sánh trên ngày, giờ. Sử dụng các cấu trúc DateTime và TimeSpan (hỗ trợ các toán tử số học và so sánh). Một đối tượng DateTime mô tả một thời điểm xác định (chẳng hạn 4:15 AM, ngày 21 tháng 04 năm 1980), trong khi đối tượng TimeSpan mô tả một khoảng thời gian (chẳng hạn 2 giờ, 35 phút). Bạn có thể cộng, trừ, so sánh các đối tượng TimeSpan và DateTime. Thực chất, cả DateTime và TimeSpan đều sử dụng tick để mô tả thời gian—1 tick bằng 100 nano-giây (một nano-giây bằng một phần tỷ (10-9) giây). TimeSpan lưu khoảng thời gian của nó là số tick bằng khoảng thời gian đó, DateTime lưu số tick đã trôi qua kể từ 12:00:00 khuya ngày 1 tháng 1 năm 0001 sau công nguyên. Cách tiếp cận này và việc sử
  2. dụng toán tử nạp chồng giúp DateTime và TimeSpan dễ dàng hỗ trợ các phép tính số học và so sánh. Bảng 2.4 tóm tắt các toán tử mà hai cấu trúc này hỗ trợ. Bảng 2.4 Các toán tử được cung cấp bởi DateTime và TimeSpan Toán tử TimeSpan DateTime Vì TimeSpan là một cấu trúc nên Vì DateTime là một cấu trúc nên Gán (=) phép gán trả về một bản sao, phép gán trả về một bản sao, không phải một tham chiếu. không phải một tham chiếu. Cộng một TimeSpan vào một Cộng (+) Cộng hai đối tượng TimeSpan. DateTime. Trừ một DateTime cho một Trừ (-) Trừ hai đối tượng TimeSpan. DateTime hoặc một TimeSpan. So sánh hai đối tượng TimeSpan So sánh hai đối tượng DateTime Bằng (==) và trả về true nếu bằng nhau. và trả về true nếu bằng nhau. So sánh hai đối tượng TimeSpan So sánh hai đối tượng DateTime Không bằng và trả về true nếu không bằng và trả về true nếu không bằng (!=) nhau. nhau. Xác định một đối tượng Xác định một đối tượng DateTime TimeSpan có lớn hơn một đối Lớn hơn (>) có lớn hơn một đối tượng tượng TimeSpan khác hay DateTime khác hay không. không. Xác định một đối tượng Xác định một đối tượng DateTime Lớn hoặc bằng TimeSpan có lớn hơn hoặc bằng có lớn hơn hoặc bằng một đối (>=) một đối tượng TimeSpan khác tượng DateTime khác hay không. hay không. Xác định một đối tượng Xác định một đối tượng DateTime TimeSpan có nhỏ hơn một đối Nhỏ hơn (
  3. Trả về một giá trị đảo dấu của Âm (-) Không hỗ trợ. một TimeSpan. Dương (+) Trả về chính TimeSpan. Không hỗ trợ. Cấu trúc DateTime cũng hiện thực các phương thức AddTicks, AddMilliseconds, AddSeconds, AddMinutes, AddHours, AddDays, AddMonths, và AddYears. Mỗi phương thức này cho phép bạn cộng (hoặc trừ bằng các giá trị âm) phần tử thời gian thích hợp với đối tượng DateTime. Các phương thức này và các toán tử được liệt kê trong bảng 2.4 không làm thay đổi DateTime gốc—thay vào đó chúng sẽ tạo một đối tượng mới với giá trị đã được thay đổi. Đoạn mã dưới đây trình bày cách sử dụng các toán tử để thao tác các cấu trúc DateTime và TimeSpan: // Tạo một TimeSpan mô tả 2.5 ngày. TimeSpan timespan1 = new TimeSpan(2,12,0,0); // Tạo một TimeSpan mô tả 4.5 ngày. TimeSpan timespan2 = new TimeSpan(4,12,0,0); // Tạo một TimeSpan mô tả 1 tuần. TimeSpan oneWeek = timespan1 + timespan2; // Tạo một DateTime với ngày giờ hiện tại. DateTime now = DateTime.Now; // Tạo một DateTime mô tả 1 tuần trước đây. DateTime past = now - oneWeek; // Tạo một DateTime mô tả 1 tuần trong tương lai. DateTime future = now + oneWeek; 1.2 Sắp xếp một mảng hoặc một ArrayList Bạn cần sắp xếp các phần tử trong một mảng hoặc một ArrayList. Sử dụng phương thức ArrayList.Sort để sắp xếp ArrayList và phương thức tĩnh Array.Sort để sắp xếp mảng. Dạng đơn giản nhất của Sort là sắp xếp các đối tượng nằm trong một mảng hoặc ArrayList khi các đối tượng này có hiện thực giao diện System.Icomparable và có kiểu giống nhau—tất cả các kiểu dữ liệu cơ bản đều hiện thực Icomparable. Đoạn mã dưới đây minh họa cách sử dụng phương thức Sort: // Tạo một mảng mới và thêm phần tử vào. int[] array = {4, 2, 9, 3}; // Sắp xếp mảng.
  4. Array.Sort(array); // Hiển thị nội dung của mảng đã được sắp xếp. foreach (int i in array) { Console.WriteLine(i);} // Tạo một ArrayList mới và thêm phần tử vào. ArrayList list = new ArrayList(4); list.Add("Phong"); list.Add("Phuong"); list.Add("Khoa"); list.Add("Tam"); // Sắp xếp ArrayList. list.Sort(); // Hiển thị nội dung của ArrayList đã được sắp xếp. foreach (string s in list) { Console.WriteLine(s);} Để sắp xếp các đối tượng không hiện thực IComparable, bạn cần truyền cho phương thức Sort một đối tượng hiện thực giao diện System.Collections.IComparer. Hiện thực của IComparer phải có khả năng so sánh các đối tượng nằm trong mảng hoặc ArrayList (xem mục 16.3 để biết cách hiện thực IComparable và IComparer). 1.3 Chép một tập hợp vào một mảng Bạn cần chép nội dung của một tập hợp vào một mảng. Sử dụng phương thức ICollection.CopyTo (được hiện thực bởi tất cả các lớp tập hợp), hoặc sử dụng phương thức ToArray (được hiện thực bởi các tập hợp ArrayList, Stack, Queue). Các phương thức ICollection.CopyTo và ToArray có cùng chức năng, chúng chép các phần tử trong một tập hợp vào một mảng. Sự khác biệt nằm ở chỗ CopyTo chép vào một mảng đã có, trong khi ToArray tạo ra một mảng mới rồi chép vào đó. CopyTo nhận hai đối số: một mảng và một chỉ số. Mảng này là đích của quá trình sao chép và phải có kiểu tương thích với các phần tử của tập hợp. Nếu kiểu không tương thích hay không có sự chuyển đổi ngầm từ kiểu phần tử của tập hợp sang kiểu phần tử của mảng thì ngoại lệ System.InvalidCastException sẽ bị ném. Chỉ số là một vị trí trong mảng mà bắt đầu từ đó các phần tử của tập hợp sẽ được chép vào. Nếu chỉ số này lớn hơn hoặc bằng chiều dài của mảng, hoặc số phần tử của tập hợp vượt quá sức chứa của mảng thì ngoại lệ System.ArgumentException sẽ bị ném. Đoạn mã sau minh họa cách sử dụng CopyTo để chép nội dung của một ArrayList vào một mảng:
  5. // Tạo một ArrayList mới và thêm phần tử vào. ArrayList list = new ArrayList(5); list.Add("Phuong"); list.Add("Phong"); list.Add("Nam"); list.Add("Tam"); list.Add("Nhan"); // Tạo một string[] và sử dụng ICollection.CopyTo // để chép nội dung của ArrayList. string[] array1 = new string[5]; list.CopyTo(array1,0); Các lớp ArrayList, Stack, và Queue cũng hiện thực phương thức ToArray, phương thức này tự động tạo một mảng với kích thước đủ để chứa các phần tử của của tập hợp. Nếu bạn không truyền đối số cho ToArray, nó sẽ trả về một object[] bất chấp kiểu của các đối tượng trong tập hợp. Tuy nhiên, bạn có thể truyền một đối tượng System.Type để chỉ định kiểu của mảng (Bạn phải ép mảng kiểu mạnh về đúng kiểu). Ví dụ sau minh họa cách sử dụng ToArray cho ArrayList ở trên: // Sử dụng ArrayList.ToArray để tạo một object[] // từ nội dung của tập hợp. object[] array2 = list.ToArray(); // Sử dụng ArrayList.ToArray để tạo một string[] kiểu mạnh // từ nội dung của tập hợp. string[] array3 = (string[])list.ToArray(System.Type.GetType("System.String"));

CÓ THỂ BẠN MUỐN DOWNLOAD

Đồng bộ tài khoản