我有待办事项的数组[Todo1, Todo2, Todo3]
如何判断Ruby on Rails 3中的对象数组的索引?
每个对象都有一个属性,:done_date
我需要找对象的第一实例,其中:done_date => null
然后,我需要知道什么索引呢是todos[N]
所以我可以找到之前todos[N-1]
我该怎么做?
我有待办事项的数组[Todo1, Todo2, Todo3]
如何判断Ruby on Rails 3中的对象数组的索引?
每个对象都有一个属性,:done_date
我需要找对象的第一实例,其中:done_date => null
然后,我需要知道什么索引呢是todos[N]
所以我可以找到之前todos[N-1]
我该怎么做?
你可以试着用稍微不同的方式去做。利用Ruby的Enumerable#take_while
的:
# assuming 'todos' holds your todo objects
todos.take_while { |todo| todo.done_date != nil }.last
这将让来自todos
所有待办事项对象,直到它看到一个零done_date
,然后抓住最后一个。您将在第一个零done_date
之前获得最后的待办事项。
所以,如果你有
todos = [todo1, todo2, todo3, todo4_with_null_done_date]
代码上面的例子将返回todo3
。
也就是说,如果你真的寻找的东西,利用阵列的indicies的,你可以尝试这样的事情还有:
first_nil_index = todos.find_index { |todo| todo.done_date.nil? }
todos[first_nil_index - 1]
嗯,这很不错,我喜欢这个。 – Angela
我不明白_first_什么定义。在SQL(Set Query Language)中,没有定义的顺序。你会以随机顺序得到它们。如果订单已经定义,那么你有数组,使用:'ind = array.find_index {| t | t.done_date == nil}'。 – mliebelt
对,这是下一部分 - 我需要按original_date对它进行排序,我该怎么做? – Angela
'array.sort {| a,b | a.original_date <=> b.original_date}'? – mliebelt