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

回答編集履歴

7

修正

2017/08/06 05:55

投稿

退会済みユーザー
answer CHANGED
@@ -3,6 +3,21 @@
3
3
 
4
4
  arr = [[1, 'aiu'], [2, 'aaa'], [3, 'ueo']]
5
5
 
6
+ def sort_test(arr, key)
7
+ a = Array.new(2).map{ [] }
8
+ arr.each { |e| (key == e[0] ? a[0] : a[1]) << e }
9
+ a[0].concat(a[1])
10
+ end
11
+
12
+ p sort_test(arr, 2)
13
+ # => [[2, "aaa"], [1, "aiu"], [3, "ueo"]]
14
+
15
+ ```
16
+ ```Ruby
17
+ # encoding: utf-8
18
+
19
+ arr = [[1, 'aiu'], [2, 'aaa'], [3, 'ueo']]
20
+
6
21
  def sort_test(arr, keys)
7
22
  key = [keys]
8
23
  key.flatten! if keys.is_a?(Array)

6

修正

2017/08/06 05:55

投稿

退会済みユーザー
answer CHANGED
@@ -1,7 +1,7 @@
1
1
  ```Ruby
2
2
  # encoding: utf-8
3
3
 
4
- arr = [[3, 'ueo'], [2, 'aaa'], [1, 'aiu']]
4
+ arr = [[1, 'aiu'], [2, 'aaa'], [3, 'ueo']]
5
5
 
6
6
  def sort_test(arr, keys)
7
7
  key = [keys]
@@ -10,7 +10,7 @@
10
10
  arr.each do |e|
11
11
  (key.include?(e[0]) ? a[0] : a[1]) << e
12
12
  end
13
- a[0].sort.concat(a[1].sort)
13
+ a[0].concat(a[1])
14
14
  end
15
15
 
16
16
  p sort_test(arr, 2)
@@ -22,6 +22,6 @@
22
22
  ```
23
23
  私はRuby初心者でRailsの事情は分かりません。
24
24
  とんちんかんなことを言っていたらすみません。
25
- 優先的にsortしたい要素を取り出して
25
+ 優先的にsortしたい要素とそれ以外別々の配列に
26
- それ以外をsort、その後、取り出してのに
26
+ して優先的にsortしい方配列それ以外の配列
27
- sortした結果入れて返すという方法はどうでしょうか。
27
+ くっつけて返すという方法はどうでしょうか。

5

修正

2017/08/06 05:51

投稿

退会済みユーザー
answer CHANGED
@@ -10,7 +10,7 @@
10
10
  arr.each do |e|
11
11
  (key.include?(e[0]) ? a[0] : a[1]) << e
12
12
  end
13
- a[0].concat(a[1].sort)
13
+ a[0].sort.concat(a[1].sort)
14
14
  end
15
15
 
16
16
  p sort_test(arr, 2)

4

修正

2017/08/06 05:45

投稿

退会済みユーザー
answer CHANGED
@@ -10,7 +10,7 @@
10
10
  arr.each do |e|
11
11
  (key.include?(e[0]) ? a[0] : a[1]) << e
12
12
  end
13
- a[0].sort.concat(a[1].sort)
13
+ a[0].concat(a[1].sort)
14
14
  end
15
15
 
16
16
  p sort_test(arr, 2)

3

修正

2017/08/06 05:43

投稿

退会済みユーザー
answer CHANGED
@@ -6,16 +6,11 @@
6
6
  def sort_test(arr, keys)
7
7
  key = [keys]
8
8
  key.flatten! if keys.is_a?(Array)
9
- a = []
9
+ a = Array.new(2).map{ [] }
10
- b = []
11
10
  arr.each do |e|
12
- if key.include?(e[0])
11
+ (key.include?(e[0]) ? a[0] : a[1]) << e
13
- a << e
14
- else
15
- b << e
16
- end
17
12
  end
18
- a.sort.concat(b.sort)
13
+ a[0].sort.concat(a[1].sort)
19
14
  end
20
15
 
21
16
  p sort_test(arr, 2)

2

修正

2017/08/06 05:11

投稿

退会済みユーザー
answer CHANGED
@@ -3,22 +3,27 @@
3
3
 
4
4
  arr = [[3, 'ueo'], [2, 'aaa'], [1, 'aiu']]
5
5
 
6
- def sort_test(arr, key)
6
+ def sort_test(arr, keys)
7
+ key = [keys]
8
+ key.flatten! if keys.is_a?(Array)
7
9
  a = []
8
10
  b = []
9
11
  arr.each do |e|
10
- if e[0] == key
12
+ if key.include?(e[0])
11
13
  a << e
12
14
  else
13
15
  b << e
14
16
  end
15
17
  end
16
- a.concat(b.sort)
18
+ a.sort.concat(b.sort)
17
19
  end
18
20
 
19
21
  p sort_test(arr, 2)
20
22
  # => [[2, "aaa"], [1, "aiu"], [3, "ueo"]]
21
23
 
24
+ p sort_test(arr, [2, 3])
25
+ # => [[2, "aaa"], [3, "ueo"], [1, "aiu"]]
26
+
22
27
  ```
23
28
  私はRuby初心者でRailsの事情は分かりません。
24
29
  とんちんかんなことを言っていたらすみません。

1

修正

2017/08/06 05:06

投稿

退会済みユーザー
answer CHANGED
@@ -21,6 +21,7 @@
21
21
 
22
22
  ```
23
23
  私はRuby初心者でRailsの事情は分かりません。
24
+ とんちんかんなことを言っていたらすみません。
24
25
  優先的にsortしたい要素を取り出して
25
26
  それ以外をsort、その後、取り出していたものに
26
27
  sortした結果を入れて返すという方法はどうでしょうか。