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

回答編集履歴

3

間違っていたので修正

2020/07/17 17:54

投稿

magf
magf

スコア212

answer CHANGED
@@ -1,5 +1,5 @@
1
1
  ```Ruby
2
- ha1.zip(ha2, ha1.size.times).max[2]
2
+ ha1.zip(ha2.map(&:-@), ha1.size.times).max[2]
3
3
  ```
4
4
 
5
5
  これでどうでしょう。
@@ -8,5 +8,5 @@
8
8
  普通のindexはインデックスが小さい方をとるので、そうしたければ↓のようになります。
9
9
 
10
10
  ```Ruby
11
- ha1.size - ha1.zip(ha2, ha1.size.downto(1)).max[2]
11
+ ha1.size - ha1.zip(ha2.map(&:-@), ha1.size.downto(1)).max[2]
12
12
  ```

2

修正しました

2020/07/17 17:54

投稿

magf
magf

スコア212

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

1

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

2020/07/17 15:54

投稿

magf
magf

スコア212

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