質問するログイン新規登録

回答編集履歴

3

コード変更

2017/08/06 13:05

投稿

katoy
katoy

スコア22328

answer CHANGED
@@ -34,8 +34,30 @@
34
34
 
35
35
  追記 2017-08-06
36
36
  seq_array を loop でなく、group_by で書き直すことができました。
37
+ さらに数値範囲を示す文字をパラメータで指定できるようにしてみました。
37
38
  ```ruby
39
+ # 連続した数値毎に分割する
38
- def seq_array(array)
40
+ def to_seq_array(array)
39
- array.uniq.sort.group_by.with_index {|x, idx| x - idx }.values
41
+ array.group_by.with_index {|x, idx| x - idx }.values
40
42
  end
43
+
44
+ def to_range_array(seq_array, range_str = '〜')
45
+ seq_array.map { |seq| seq.size > 2 ? "#{seq[0]}#{range_str}#{seq[-1]}" : seq }
46
+ end
47
+
48
+ data = ["1", "2", "3", "5", "7", "8", "9", "10", "11", "12", "15", "16"]
49
+ seq_array = to_seq_array(data.map(&:to_i))
50
+
51
+ range_array = to_range_array(seq_array)
52
+ puts range_array.join(',')
53
+
54
+ range_array = to_range_array(seq_array, "..")
55
+ puts range_array.join(' ')
41
56
  ```
57
+
58
+ 実行結果:
59
+ ```
60
+ $ ruby xxx.rb
61
+ 1〜3,5,7〜12,15,16
62
+ 1..3 5 7..12 15 16
63
+ ```

2

誤字

2017/08/06 13:05

投稿

katoy
katoy

スコア22328

answer CHANGED
@@ -32,7 +32,7 @@
32
32
 
33
33
  分割処理と文字化処理が明確に分離しているので、文字列書式を変更するのは容易だと思います。
34
34
 
35
- 追記 2017-08-08
35
+ 追記 2017-08-06
36
36
  seq_array を loop でなく、group_by で書き直すことができました。
37
37
  ```ruby
38
38
  def seq_array(array)

1

追記

2017/08/06 12:03

投稿

katoy
katoy

スコア22328

answer CHANGED
@@ -30,4 +30,12 @@
30
30
  すると、最初の数列全体を 連続した部分毎に分割することができます。
31
31
  あとは、この分割数列を文字列化する処理を書きました。
32
32
 
33
- 分割処理と文字化処理が明確に分離しているので、文字列書式を変更するのは容易だと思います。
33
+ 分割処理と文字化処理が明確に分離しているので、文字列書式を変更するのは容易だと思います。
34
+
35
+ 追記 2017-08-08
36
+ seq_array を loop でなく、group_by で書き直すことができました。
37
+ ```ruby
38
+ def seq_array(array)
39
+ array.uniq.sort.group_by.with_index {|x, idx| x - idx }.values
40
+ end
41
+ ```