是否可以从另一个阵列创建数组?
Lang:Ruby on Rails
工人有权填写自己的工作时间。有时他们会忘记这样做。这就是我想要解决的问题。最后,我想要一个带有时间码的数组,工作人员忘记记录他的工作时间。
timecodes = [201201, 201202, 201203, 201204, 201205, 201206, 201207, 201208, 201209, 201210, 201211, 201212, 201213, 201301, 201302, 201304, 201305, 201306, ...]
工人从201203年到20120年与我们合作。
timecards = [201203, 201204, 201205, 201207, 201208, 201209]
如您所见,他忘了注册201206。
# Create Array from timecode on start to timecode on end
worked_with_us = [201203, 201204, 201205, 201206, 201207, 201208, 201209]
#=> This is the actual problem, how can I automate this?
forgot_to_register = worked_with_us.?????(timecards)
forgot_to_register = worked_with_us - timecards # Thanks Zwippie
#=> [201206]
现在我知道工人忘了记录他的工作时间。
答案 0 :(得分:2)
您可以使用-
(减号)减去数组:
[1, 2, 3] - [1, 3] = [2]
要构建一个包含年/月的数组,可以使用Range来完成,但这只适用于每年构建一个数组,例如:
months = (2012..2013).map do |year|
("#{year}01".."#{year}12").to_a.collect(&:to_i)
end.flatten
=> [201201, 201202, 201203, 201204, 201205, 201206, 201207, 201208, 201209, 201210, 201211, 201212, 201301, 201302, 201303, 201304, 201305, 201306, 201307, 201308, 201309, 201310, 201311, 201312]
对于动态创建这些范围的功能:
def month_array(year_from, year_to, month_from=1, month_to=12)
(year_from..year_to).map do |year|
# Correct from/to months
mf = year_from == year ? month_from : 1
mt = year_to == year ? month_to : 12
(mf..mt).map do |month|
("%d%02d" % [year, month]).to_i
end
end.flatten
end
更新:你想要这个方法的其他输入参数,但我希望你能自己解决这个问题。 :)