2015-10-28 3 views
1

Я действительно озадачен чем-то, поскольку он вел в часах головы, царапая; У меня есть следующий фрагмент кодаЧто такое.

objectA.arrayA.each do |p| 
    do stuff with p 
end 

Я думал, это было прекрасно, так как от this question я чувствовал, что, поскольку я использую массив для работы, так что я должен быть в порядке. К сожалению, это было не так, поскольку порядок, при котором каждый итератор возвращал элементы, был не всегда одинаковым. После нескольких часов, глядя на другие блоки для выпуска подкачка выше код с этим цикл решил проблему:

for i in 0...objectA.arrayA.length 
    do stuff with the array element 
end 

Любой имеет ни малейшего представления, когда упорядоченность каждый гарантированную?

+0

'делать вещи с p', вероятно, важно здесь. Вы делали какие-либо изменения в элементах массива в этом цикле? –

+0

@MichaelBerkowski хорошо, я не трогаю элементы массива, что я делаю, это некоторые, если чеки, но я не касаюсь фактических значений или порядка; например, «если p.x == 1» увеличивает значение вне массива. надеюсь это поможет. – jtimz

+2

Можете ли вы представить минимальный рабочий пример, демонстрирующий это? –

ответ

1

Документов для Enumerable состояния

перечислимых подмешать предоставляют классы коллекций с несколькими обходом и поиском методов, а также с возможностью сортировки. Класс должен обеспечивать каждый способ, который дает последовательные члены из сбор. Если используется Enumerable # max, #min или #sort, объекты в коллекции также должны реализовать значимый оператор < =>, так как эти методы зависят от порядка между членами коллекции.

Так Array.each должны также дать последовательные элементы, чтобы удовлетворить этот контракт

Если реализация не требует этого, было бы ошибкой в ​​реализации

Смежные вопросы