2011-06-24 91 views
13

Tôi đang cố gắng tìm ra chức năng insert hoạt động trong Ruby.Làm thế nào để .insert hoạt động?

Tôi đã tham khảo ý kiến ​​của Google và ruby-doc.com nhưng giải thích là không đủ để mô tả chức năng bí ẩn này (dường như).

Dưới đây là những gì khó hiểu cho tôi:

a = %w{a b c d} 
puts a.insert(4, 5) output = a,b,c,d,5 

Câu hỏi đầu tiên được tăng được, tại sao là 4 không chèn?

puts a.insert(2,2,6) 

Đầu ra là:

a 
b 
2 
6 
c 
d 

Hai vấn đề do này là

  1. Tại sao 2 không chèn hai lần?
  2. Tại sao 2 và 6 (dường như) được đặt tùy ý giữa b và c?

Trả lời

36

Tôi không chắc chắn sự nhầm lẫn là gì. Từ các tài liệu của Ruby:

ary.insert(index, obj...) -> ary 

Chèn các giá trị cho trước phần tử với chỉ số nhất định (có thể được âm).

a = %w{ a b c d } 
a.insert(2, 99)   #=> ["a", "b", 99, "c", "d"] 
a.insert(-2, 1, 2, 3) #=> ["a", "b", 99, "c", 1, 2, 3, "d"] 

Vì vậy, a.insert(2, 99) được chèn 99 vào mảng ngay trước khi mảng bù đắp 2. Hãy nhớ rằng chỉ số của một mảng bắt đầu từ 0, vì vậy đó là thứ ba khe trong mảng.

Ví dụ thứ hai là chèn mảng [1,2,3] vào vị trí thứ hai từ mảng cuối cùng, vì số chênh lệch âm tính từ cuối mảng. -1 là chỉ số cuối cùng, -2 là giây cuối cùng.

Các tài liệu Mảng nói nó tốt:

Mảng indexing bắt đầu từ 0, như trong C hoặc Java. Chỉ số âm được giả định là tương ứng với kết thúc của mảng --- tức là chỉ mục -1 cho biết phần tử cuối cùng của mảng, -2 là phần tử kế tiếp cuối cùng trong mảng, v.v. .

Đây là những khái niệm rất quan trọng để tìm hiểu trong lập trình nói chung, không chỉ trong Ruby.

5

Có vẻ như tham số đầu tiên là chỉ mục để chèn vào và phần còn lại là các mục cần chèn.

Các docs sẽ xuất hiện để khẳng định điều này, danh sách các chức năng như ary.insert(index, obj...) → ary

Nếu bạn chỉ muốn thêm một số giá trị vào cuối mảng (Tôi không biết cú pháp Ruby nhưng điều này nên được đúng) Tôi nghĩ rằng bạn sẽ muốn gọi số a.insert(a.length, 4, 5) hoặc a.insert(a.length, 2, 2, 6).

+0

Cảm ơn bạn. Sẽ làm. – Bodhidarma

+3

Nếu bạn chỉ muốn thêm một số giá trị vào cuối mảng, hãy sử dụng phương thức ['Array # push'] (http://www.ruby-doc.org/core/classes/Array.html#M000226). –

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