2008-08-27 14 views
16

Trong Ruby, cố gắng in ra các phần tử riêng lẻ của một chuỗi là làm cho tôi gặp rắc rối. Thay vì nhìn thấy mỗi nhân vật, tôi nhìn thấy giá trị ASCII của họ thay vì:Ruby - Chuyển đổi số nguyên thành chuỗi

>> a = "0123" 
=> "0123" 
>> a[0] 
=> 48 

Tôi đã nhìn trực tuyến, nhưng không thể tìm thấy bất cứ cách nào để có được bản gốc "0" trở lại ra khỏi nó. Tôi là một chút mới với Ruby để tôi biết nó phải là một cái gì đó đơn giản nhưng tôi dường như không thể tìm thấy nó.

Trả lời

15

Hoặc bạn có thể chuyển đổi các số nguyên với giá trị nhân vật của mình:

a[0].chr 
7

Bạn muốn [0,1] thay vì [0].

6

Tôi tin rằng đây là sự thay đổi trong Ruby 1,9 đến nỗi "asdf" [2] mang lại "d" chứ không phải là mã ký tự

1

@Chris,

Đó chỉ là cách [] và [,] được định nghĩa cho lớp String.

Khám phá String API.

1

Các [,] điều hành trả về một chuỗi lại cho bạn, đó là một nhà điều hành chuỗi con, nơi như toán tử [] trả về nhân vật mà ruby đối xử như một con số khi in nó ra.

5

Để tóm tắt:

Hành vi này sẽ được đi xa trong phiên bản 1.9, trong đó nhân vật chính được trả lại, nhưng trong các phiên bản trước, cố gắng để tham khảo một nhân vật duy nhất của một chuỗi bởi vị trí của nhân vật của mình sẽ trở lại mình Giá trị ký tự (vì vậy "ABC" [2] trả về 67)

Có một số phương thức trả về một loạt các ký tự từ một chuỗi (xem tài liệu Ruby trên chuỗi slice method) Tất cả trở về sau "C" :

"ABC"[2,1] 
"ABC"[2..2] 
"ABC".slice(2,1) 

Tôi tìm thấy bộ chọn phạm vi để dễ đọc nhất. Có ai có thể nói cho dù nó kém hiệu quả hơn không?

0

Tôi nghĩ rằng each_char hoặc chars mô tả tốt hơn những gì bạn muốn.

irb(main):001:0> a = "0123" 
=> "0123" 
irb(main):002:0> Array(a.each_char) 
=> ["0", "1", "2", "3"] 
irb(main):003:0> puts Array(a.each_char) 
0 
1 
2 
3 
=> nil