Cho số nguyên tối thiểu và số nguyên tối đa, tôi muốn tạo một mảng tính từ mức tối thiểu đến tối đa hai, sau đó quay xuống (một lần nữa bằng hai , lặp lại số lượng tối đa). Ví dụ: nếu số tối thiểu là 1 và số tối đa là 9, tôi muốn [1, 3, 5, 7, 9, 9, 7, 5, 3, 1]
.Làm thế nào để tạo danh sách các số và nối ngược với số nguyên một cách hiệu quả trong Ruby
Tôi đang cố gắng súc tích nhất có thể, đó là lý do tôi sử dụng một bộ lót.
Trong Python, tôi sẽ làm điều này:
range(1, 10, 2) + range(9, 0, -2)
Trong Ruby, mà tôi chỉ mới bắt đầu để tìm hiểu, tất cả tôi đã đi lên với cho đến nay là:
(1..9).inject([]) { |r, num| num%2 == 1 ? r << num : r }.reverse.inject([]) { |r, num| r.unshift(num).push(num) }
nào công trình, nhưng tôi biết có phải là một cách tốt hơn. Nó là gì?
Oh, làm thế nào tôi có thể quên 'Phạm vi # step'! –
Phạm vi # bước dường như [mong đợi một khối] (http://ruby-doc.org/core/classes/Range.html#M000695) - ví dụ đầu tiên, trong khi nếu không chính xác những gì tôi đã hy vọng, là ném một lỗi cho tôi. ('không chặn (LocalJumpError)') – Kiwi
@Kiwi: Bạn đang sử dụng Ruby 1.8.6. Nâng cấp lên 1.8.7+ hoặc 'bao gồm" backports "' –