回答編集履歴

3

間違っていたので修正

2020/07/17 17:54

投稿

magf
magf

スコア212

test CHANGED
@@ -1,6 +1,6 @@
1
1
  ```Ruby
2
2
 
3
- ha1.zip(ha2, ha1.size.times).max[2]
3
+ ha1.zip(ha2.map(&:-@), ha1.size.times).max[2]
4
4
 
5
5
  ```
6
6
 
@@ -18,6 +18,6 @@
18
18
 
19
19
  ```Ruby
20
20
 
21
- ha1.size - ha1.zip(ha2, ha1.size.downto(1)).max[2]
21
+ ha1.size - ha1.zip(ha2.map(&:-@), ha1.size.downto(1)).max[2]
22
22
 
23
23
  ```

2

修正しました

2020/07/17 17:54

投稿

magf
magf

スコア212

test CHANGED
@@ -1,3 +1,23 @@
1
- 修正中です
1
+ ```Ruby
2
2
 
3
+ ha1.zip(ha2, ha1.size.times).max[2]
4
+
5
+ ```
6
+
7
+
8
+
9
+ これでどうでしょう。
10
+
11
+ `ha1.zip(ha2, ha1.size.times)`は`[[ha1[0], ha2[0], 0], [ha1[1], ha2[1], 1], ...]`というような配列を生成しています。
12
+
13
+ それをmaxすると、`Array#<=>`は要素を前から順に比較していく(辞書式)ので、ha1を優先し、ha1が同じならha2を比較し、それが同じならインデックスが大きい方をとる、というふうにしています。
14
+
15
+ 普通のindexはインデックスが小さい方をとるので、そうしたければ↓のようになります。
16
+
17
+
18
+
3
- ------
19
+ ```Ruby
20
+
21
+ ha1.size - ha1.zip(ha2, ha1.size.downto(1)).max[2]
22
+
23
+ ```

1

質問文を読み間違えました

2020/07/17 15:54

投稿

magf
magf

スコア212

test CHANGED
@@ -1,19 +1,3 @@
1
- ```Ruby
1
+ 修正中です
2
2
 
3
- max = ha1.max
4
-
5
- tmp = ha1.size.times.filter { |j| ha1[j] == max }
6
-
7
- ```
8
-
9
-
10
-
11
- こういうのでどうでしょうか。大量のデータを扱うのでなければ↓でもいいでしょう。
12
-
13
-
14
-
15
- ```Ruby
3
+ ------
16
-
17
- tmp = ha1.size.times.filter { |j| ha1[j] == ha1.max }
18
-
19
- ```