2013-08-26 57 views
5

Làm cách nào để sắp xếp một mảng trong đường ray (thứ tự bảng chữ cái). Tôi cố gắngSắp xếp theo thứ tự abc trong đường ray

sort_by(&:field_name) 

Nhưng điều đó mang lại cho tôi với mảng theo thứ tự chữ cái viết hoa và trường hợp sau đó thấp hơn order.I thử

array.sort! { |x,y| x.field_name.downcase <=> y.field_name.downcase } 

Có cách nào để giải quyết này?

+2

hãy dán mảng mẫu của bạn. –

+0

mảng mẫu [john, Alice, Joseph, anna, Zilhan] tôi muốn kết quả là [Alice, anna, john, Joseph, Zilhan] – nisha

Trả lời

10

Trước tiên, bạn nên downcase mỗi chuỗi và sau đó sắp xếp như sau:

array = ["john", "Alice", "Joseph", "anna", "Zilhan"] 
array.sort_by!{ |e| e.downcase } 
=> ["Alice", "anna", "john", "Joseph", "Zilhan"] 
+0

bạn vừa phạm sai lầm. sort_by! sẽ tự sắp xếp đối tượng mảng. –

+0

Có tôi biết rằng, nó phụ thuộc vào yêu cầu, bạn cũng có thể sử dụng: new_array = array.sort_by {| e | e.downcase}, nhưng chỉ khi mảng cũ được yêu cầu thêm, nếu không nó sẽ vô dụng để tạo một đối tượng khác. –

0

Hãy nhận biết - tên có thể chứa các ký tự đặc biệt. Chúng sẽ được sắp xếp đến cuối.

>> ["Ägidius", "john", "Alice", "Zilhan"].sort_by!{ |e| e.downcase } 
=> ["Alice", "john", "Zilhan", "Ägidius"] 

Để bù đắp này, bạn có thể sử dụng ...

>> ["Ägidius", "john", "Alice", "Zilhan"].sort_by!{ |e| ActiveSupport::Inflector.transliterate(e.downcase) } 
=> ["Ägidius", "Alice", "john", "Zilhan"] 
Các vấn đề liên quan