1

配列から番号順に並べられた番号をグループ化する必要があります。

(Ruby 1.9.2、レール 3.2 を使用)

Example1:
[1,2,4,5,6]

Example2:
[1,3,4,6,7]

Example3:
[1,2,3,5,6]

Example4:
[1,2,4,5,7]

グループ化後

Example1:
[[1,2],[4,5,6]]

Example2:
[[1],[3,4],[6,7]]

Example3:
[[1,2,3],[5,6]]

Example4:
[[1,2],[4,5],[7]]

あなたはアイデアを得る。(私が実際に行っているのは、日をグループ化することですが、関係ありません)

前もって感謝します!

4

3 に答える 3

3

この操作を何と呼ぶか​​はわかりませんが、処理された最後の要素に基づく一種のグループ化方法です。何かのようなもの:

def groupulate(list)
  list.inject([ ]) do |result, n|
    if (result[-1] and result[-1][-1] == n - 1)
      result[-1] << n
    else
      result << [ n ]
    end

    result
  end
end

Enumerable モジュールは、リストを処理するための多数のユーティリティ メソッドを提供しますinjectが、最も柔軟です。

于 2012-04-09T23:36:03.410 に答える
2

inject(別名)を使用するのに最適な問題reduce

def group_consecutive(arr)
  arr.inject([[]]) do |memo, num|
    if memo.last.count == 0 or memo.last.last == num - 1
      memo.last << num
    else
      memo << [ num ]
    end
    memo
  end
end

ここで実行してください:http://rubyfiddle.com/riddles/0d0a5

于 2012-04-09T23:42:34.913 に答える
1
a = [1,2,4,5,7]
out = []
a.each_index do |i|
  if out.last and out.last.last == a[i]-1
    out.last << a[i]
  else
    out << [a[i]]
  end
end

puts out.inspect
于 2012-04-09T23:34:41.380 に答える