Tôi đang làm việc với một loạt các nốt midi, trông như thế này ...của Ruby mảng - làm thế nào tôi có thể làm cho các giá trị tồn tại qua con số không đánh giá cao
pitches = [
60, nil, nil, nil, 67, nil, nil, nil,
nil, nil, nil, nil, nil, nil, nil, nil,
nil, nil, nil, nil, nil, nil, nil, nil,
nil, nil, nil, nil, nil, nil, nil, nil
]
Trong trường hợp này, sân vẫn là 60 trên chỉ số 1, 2 và 3.
Tiếp theo chỉ số 4, sân vẫn là 67.
Làm thế nào tôi có thể viết một phương pháp để xác định các giá trị không bằng không trước đó?
Cách duy nhất tôi có thể nghĩ đến hiện để làm nó trông giống một chút vụng về:
def pitch_at_step(pitches,step)
if pitches.any?
x = pitches[step]
until x != nil
index -= 1
x = pitches[step]
end
x
else
nil
end
end
Sản lượng dự kiến được ghi theo dạng:
pitch_at_step(pitches, 0) # 60
pitch_at_step(pitches, 2) # 60
pitch_at_step(pitches, 4) # 67
pitch_at_step(pitches, 8) # 67
Đây có phải là giải pháp tốt nhất? có cách nào hiệu quả hơn và/hoặc hiệu quả hơn không?
Bạn có thể cũng cung cấp cho các đầu ra? Vì vậy, chúng tôi không cần phải chạy mã của bạn. –
Nó phải là giá trị phi nil mới nhất, vì vậy 0: 60, 1: 60, 2: 60, 3: 60, 4: 67, 5: 67, 6: 67, v.v. – AJFaraday