2017-07-25 31 views
5

Tôi có 2 chuỗi có cùng độ dài.
Tôi giả sử (có thể sai) rằng chèn khoảng cách giữa mỗi ký tự của mỗi chuỗi sẽ không thay đổi thứ tự của chúng.Chèn khoảng cách giữa các ký tự của hai chuỗi sửa đổi thứ tự của chúng

var e1 = "12*4"; 
var e2 = "12-4"; 
Console.WriteLine(String.Compare(e1,e2)); // -1 (e1 < e2) 

var f1 = "1 2 * 4"; 
var f2 = "1 2 - 4"; 
Console.WriteLine(String.Compare(f1,f2)); // +1 (f1 > f2) 

Nếu tôi chèn các ký tự khác (_ x ví dụ), thứ tự được giữ nguyên.

Điều gì đang xảy ra?

Xin cảm ơn trước.

+1

Tôi không tin bạn nên tôi đã thử nghiệm. Điều này thật kỳ lạ. – Paparazzi

+0

Dường như chỉ có không gian cuối cùng là phá vỡ nó. – Paparazzi

+1

Khi sử dụng 'StringComparison.Ordinal' cả hai kết quả trong' -3'. - ('Invariant' cũng cho thấy hành vi kỳ lạ' -1/1') – Corak

Trả lời

4

Nếu bạn sử dụng So sánh thông thường, bạn sẽ nhận được kết quả phù hợp.

Lý do là so sánh thứ tự hoạt động bằng cách đánh giá giá trị số của từng ký tự trong đối tượng chuỗi, do đó việc chèn dấu cách sẽ không tạo ra sự khác biệt.

Nếu bạn sử dụng các loại so sánh khác, có những thứ khác có liên quan. Từ các tài liệu:

Một hoạt động có sử dụng nguyên tắc phân loại từ thực hiện một nền văn hóa nhạy cảm so sánh trong đó một số ký tự Unicode nonalphanumeric thể có trọng lượng đặc biệt giao cho họ. Sử dụng quy tắc sắp xếp từ và các quy tắc của văn hóa cụ thể, dấu gạch nối ("-") có thể có một số lượng nhỏ được gán cho nó để "coop" và "co-op" xuất hiện bên cạnh lẫn nhau trong một sắp xếp danh sách.

Thao tác sử dụng quy tắc sắp xếp thứ tự thực hiện so sánh dựa trên giá trị số (điểm mã Unicode) của từng Char trong chuỗi . Một so sánh thứ tự là nhanh nhưng không nhạy cảm về văn hóa. Khi bạn sử dụng quy tắc sắp xếp thứ tự để sắp xếp chuỗi bắt đầu bằng Unicode ký tự (U +), chuỗi U + xxxx xuất hiện trước chuỗi U + yyyy nếu giá trị của xxxx nhỏ hơn số yyyy.

2

Từ MSDN:

Việc so sánh sử dụng văn hóa hiện tại để có được thông tin văn hóa cụ thể như quy định vỏ và thứ tự chữ cái của các nhân vật cá nhân. Ví dụ, một nền văn hóa có thể chỉ định rằng các kết hợp ký tự nhất định được coi là ký tự đơn, hoặc chữ hoa và chữ thường được so sánh theo một cách cụ thể hoặc thứ tự sắp xếp của ký tự tùy thuộc vào ký tự đứng trước hoặc theo sau.

Khi so sánh chuỗi, bạn nên gọi phương thức Compare (String, String, StringComparison), yêu cầu bạn chỉ định rõ ràng loại so sánh chuỗi mà phương thức sử dụng.

Điều này gợi ý rằng có một số vấn đề văn hóa có nghĩa là không gian cuối cùng thay đổi thứ tự sắp xếp của cả hai.

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