[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í

192 lượt xem

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ị.

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ử.

Bình luận Facebook

Để lại bình luận

Hãy là người đầu tiên bình luận!

Thông báo khi có
avatar
1000
wpDiscuz