如何对一组日期进行排序,使其不连续?

时间:2012-09-10 18:29:47

标签: ruby arrays sorting contiguous

如果我从连续的日期序列开始:

(Date.today..(Date.today + 30)).to_a

如何对此数组进行排序,使所有日期按顺序至少相隔1天?

我意识到这对于2个连续日期的数组当然是不可能的。

4 个答案:

答案 0 :(得分:2)

这对我有用:

dates = (Date.today..(Date.today + 30)).to_a
dates.each_with_index{|d,i| dates.push(dates.delete(d)) if i % 2}

答案 1 :(得分:2)

阵列的长度是否均匀?是这样,我只是写(如果需要,可以很容易地修改为奇数长度):

>> (1..6).each_slice(2).to_a.transpose.flatten(1)
=> [1, 3, 5, 2, 4, 6]

答案 2 :(得分:2)

(1..6).partition(&:odd?).flatten #=>[1, 3, 5, 2, 4, 6]
无论偶数或奇数元素如何,

都可以使用范围(或任何可枚举的数据)。

答案 3 :(得分:-1)

愚蠢的解决方案:

dates = (Date.today..(Date.today + 30)).to_a
begin
  ary   = dates.shuffle
  valid = (ary.select.each_with_index { |element, i| 
    ( i == ary.length-1 || (ary[i+1]  - element).abs  > 1 ) &&
    ( i == 0            || (element   - ary[i-1]).abs > 1 )
  })
end until valid.length == dates.length
ary

只有在你不太关心表现时才使用; - )