Kết nối

[LINQ và chuỗi] Phần 6: Cách sắp xếp và lọc dữ liệu văn bản theo từ hay vị trí

6.683 lượt xem 
 Cập nhật lần cuối: 26/06/2017 lúc 15:02:33

Trong bài này, chúng ta có một danh sách List với các phần tử là kiểu chuỗi. Mỗi phần tử chứa 1 tập các số (int) ngăn cách nhau bằng dấu phẩy. Chúng ta sẽ sắp xếp danh sách List này theo từng vị trí index của tập các số và hiển thị kết quả ra màn hình.

Ví dụ, chúng ta có 3 phần tử chuỗi: “6, 5, 7, 0”, “1, 9, 2, 3” và “5, 9, 2, 1”. Phần tử đầu tiên “6, 5, 7, 0” được phân tách thành 1 danh sách số nguyên (int) với 4 số: 6, 5, 7, 0, tương ứng với vị trí index từ 0 đến 3.

Nếu sắp xếp theo ví trị index = 0giảm dần, thì có kết quả:

6, 5, 7, 0
5, 9, 2, 1
1, 9, 2, 3
// cột đầu tiên 6, 5, 1 được sắp xếp giảm

Nếu sắp xếp theo vị trí index = 3giảm dần, thì có kết quả:

1, 9, 2, 3
5, 9, 2, 1
6, 5, 7, 0
// cột cuối cùng 3, 1, 0 được sắp xếp giảm

Sau đây là ví dụ thực thi.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;

namespace LINQ2String
{
    class Program
    {
        static void Main(string[] args)
        {
            // Dữ liệu nguồn --- dammio.com
            List<string> list = new List<string>() { "6, 5, 7, 0", "1, 9, 2, 3", "5, 9, 2, 1" };
            
            // Thay đổi vị trí sắp xếp từ 0 đến 3
            int sortField = 3;

            // Hiển thị kết quả
            foreach (string str in RunQuery(list, sortField))
            {
                Console.WriteLine(str);
            }

            // Giữ cửa sổ console luôn mở
            Console.WriteLine("Nhan bat ky phim de thoat!");
            Console.ReadKey();  
        }

        static IEnumerable<string> RunQuery(List<string> source, int num)
        {
            // Tách chuỗi, convert về mảng số và sắp xếp theo trường (vị trí) fields[num]
            var scoreQuery = from line in source
                             let fields = line.Split(',').Select(Int32.Parse).ToList()
                             orderby fields[num] descending
                             select line;
            return scoreQuery;
        }  

        /* Kết quả thực thi
         * Ví trị index 0 được sắp xếp giảm dần 6, 5, 1
         * 1, 9, 2, 3
         * 5, 9, 2, 1
         * 6, 5, 7, 0
        */
      
    }
}

Trong ví dụ trên, tùy theo vị trí index sắp xếp (num), chúng ta sẽ tách danh sách phần tử chuỗi thành 1 danh sách số fields = line.Split(‘,’).Select(Int32.Parse).ToList(), sau đó sắp xếp danh sách số dựa trên vị trí index fields[num] và tạo kết quả để hiển thị.

Liên quan:  [LINQ] Phần 5: Các kiểu quan hệ trong truy vấn LINQ

Kết luận: Bài này giúp chúng ta cách sắp xếp 1 danh sách văn bản theo ví trị index của danh sách con của mỗi phần tử.

Trích dẫn bài viết
  • APA:
    Dammio. (2017). [LINQ và chuỗi] Phần 6: Cách sắp xếp và lọc dữ liệu văn bản theo từ hay vị trí. https://www.dammio.com/2017/04/25/linq-va-chuoi-phan-6-cach-sap-xep-va-loc-du-lieu-van-ban-theo-tu-hay-vi-tri.
  • BibTeX:
    @misc{dammio,
    author = {Dammio},
    title = {[LINQ và chuỗi] Phần 6: Cách sắp xếp và lọc dữ liệu văn bản theo từ hay vị trí},
    year = {2017},
    url = {https://www.dammio.com/2017/04/25/linq-va-chuoi-phan-6-cach-sap-xep-va-loc-du-lieu-van-ban-theo-tu-hay-vi-tri},
    urldate = {2024-12-05}
    }
Theo dõi
Thông báo của
guest
0 Góp ý
Phản hồi nội tuyến
Xem tất cả bình luận
0
Rất thích suy nghĩ của bạn, hãy bình luận.x