2012-06-14 19 views
7

Tại sao .NET sắp xếp các ký tự '+' và '^' theo thứ tự khác với thứ tự xuất hiện trong ASCII table hoặc cách SQL sắp xếp chúng..NET sắp xếp các ký tự đặc biệt như thế nào?

Trong ASCII table '+' có giá trị là 42 và '^' có giá trị của 94 nhưng nếu bạn chạy mã như thế này:

var list = new List<string> { "+", "^", "!" }; 
list.Sort(); 

Danh sách sẽ chứa các giá trị theo thứ tự sau:

{"!", "^", "+"}

Sắp xếp LINQ tạo ra cùng một kết quả. Ai đó có thể cho tôi biết loại .NET nào không?

+1

Bạn không sắp xếp các ký tự, bạn sắp xếp chuỗi. –

Trả lời

17

.NET không sử dụng ASCII, nó sử dụng Unicode. Khi bạn thực hiện sắp xếp chuỗi, .NET (theo mặc định) sử dụng các quy tắc của văn hóa hiện tại để sắp xếp. Trong trường hợp này, các quy tắc đó chỉ ra rằng "^" xuất hiện trước "+". Bạn có thể nhận được kết quả bạn mong đợi bằng cách sử dụng các "thứ tự" chuỗi Comparer:

var list = new List<string> { "+", "^", "!" }; 
list.Sort(StringComparer.Ordinal); // Order is "!", "+", "^" 
+0

+1. Một số liên kết đến các quy tắc sắp xếp có thể được tìm thấy trong câu trả lời của tôi cho câu hỏi tương tự - http://stackoverflow.com/questions/9475535/order-of-punctuation-marks-vs-letters/9475570#9475570 –

2

này được xác định bởi bộ văn hóa hiện nay, được định nghĩa trong CompareInfo tài sản. Mỗi nền văn hóa có quy tắc phân loại theo văn hóa cụ thể cho chuỗi.

Các vấn đề liên quan