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

回答編集履歴

4

parse_ranking_number の実装行数を削減

2020/07/27 12:19

投稿

gouf
gouf

スコア2321

answer CHANGED
@@ -22,28 +22,14 @@
22
22
  end
23
23
 
24
24
  # 順位の全角数字 (1 〜 9位) を半角に変換
25
- def parse_ranking_number(str)
25
+ def parse_ranking_number(char)
26
+ trigger_pattern = %w[1 2 3 4 5 6 7 8 9]
27
+
26
- case str
28
+ case char
27
- when '1'
29
+ when *trigger_pattern
28
- 1
29
- when '2'
30
+ trigger_pattern.index(char).succ
30
- 2
31
- when '3'
32
- 3
33
- when '4'
34
- 4
35
- when '5'
36
- 5
37
- when '6'
38
- 6
39
- when '7'
40
- 7
41
- when '8'
42
- 8
43
- when '9'
44
- 9
45
31
  else
46
- str.to_i
32
+ char.to_i
47
33
  end
48
34
  end
49
35
 

3

コメント内容の修正

2020/07/27 12:19

投稿

gouf
gouf

スコア2321

answer CHANGED
@@ -13,7 +13,7 @@
13
13
 
14
14
  html = Nokogiri::HTML(html)
15
15
 
16
- # 順位, 大学名, 在籍者数を正規表現で抜き出し
16
+ # 正規表現で、順位, 大学名, 在籍者数を含む文字列を抜き出し
17
17
  def extract_universities(html)
18
18
  regexp = /([0-91234567890]{1,3}位:[○ ● ▲ ◆][^)]+))/
19
19
  _, *data = html.text.split(regexp)

2

コードの処理について コメントを追記

2020/07/27 04:44

投稿

gouf
gouf

スコア2321

answer CHANGED
@@ -13,6 +13,7 @@
13
13
 
14
14
  html = Nokogiri::HTML(html)
15
15
 
16
+ # 順位, 大学名, 在籍者数を正規表現で抜き出し
16
17
  def extract_universities(html)
17
18
  regexp = /([0-91234567890]{1,3}位:[○ ● ▲ ◆][^)]+))/
18
19
  _, *data = html.text.split(regexp)
@@ -20,6 +21,7 @@
20
21
  data
21
22
  end
22
23
 
24
+ # 順位の全角数字 (1 〜 9位) を半角に変換
23
25
  def parse_ranking_number(str)
24
26
  case str
25
27
  when '1'
@@ -45,6 +47,7 @@
45
47
  end
46
48
  end
47
49
 
50
+ # 順位, 大学名, 在籍者数を含む文字列をそれら要素ごとに分解して Hash に纏める
48
51
  def parse_to_hash(universities_info_list)
49
52
  universities_info_list.map do |x|
50
53
  ranking, university_name = x.split(/位:[○ ● ▲ ◆]/)

1

修正: nokogiri の require 行を追記

2020/07/27 04:42

投稿

gouf
gouf

スコア2321

answer CHANGED
@@ -3,6 +3,8 @@
3
3
  正規表現で巧く抜き出してあげると、「ランキング」「大学名」「在籍学生数」の3要素を Hash としてまとめることもできると思います
4
4
 
5
5
  ```ruby
6
+ require 'nokogiri'
7
+
6
8
  html = <<EOF
7
9
  <div class="Article__content">...
8
10
  ...