🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Q&A

解決済

3回答

1662閲覧

配列内の文字列で一番多く重複している文字列を抽出したい

rakuda.io

総合スコア8

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

1グッド

1クリップ

投稿2019/12/18 02:53

前提・実現したいこと

アンケート機能のようなアプリケーションで回答した文字列をまとめた配列があります。

その配列内の文字列で一番多く重複しているもの(一番多く回答されたもの)を抽出し出力

発生している問題・エラーメッセージ

うまく抽出出来ないことがあります。 コードの書き方云々が間違ってる可能性もあるのですが理解が足りてないです。 ご教授頂けたらと・・・

該当のソースコード

Ruby

1ary = [blue,red,red,green,blue,red] 2ary.group_by(&:itself).map{ |k, v| [k, v.count] }.to_h 3puts ary[0]
DrqYuto👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

puts ary[0]

これでは元の回答の先頭が表示されます。

Ruby

1ans = ary.group_by(&:itself).map{|k, v| [k, v.count]}.sort_by{|k,n| -n}

で、回答数の多い順にソートされますので、ans[0]を参照する。

投稿2019/12/18 03:26

otn

総合スコア85893

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

rakuda.io

2019/12/19 01:14

ありがとうございます! group_byで勝手にソートされると勘違いしていたみたいです・・・ 実装してみたら解決しました! 勉強になりました、ありがとうございます!
guest

0

ベストアンサー

ruby

1ary = %w[blue red red green blue red] 2puts ary.group_by(&:itself).max_by{|_, v| v.size}[0]

なお、今月出るはずのRuby2.7では

ruby

1ary = %w[blue red red green blue red] 2puts ary.tally.max_by(&:last)[0]

で取れる予定です。

投稿2019/12/18 03:24

編集2019/12/19 06:39
asm

総合スコア15149

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

rakuda.io

2019/12/19 01:20

非常に簡潔シンプルなコードで、さらに新バージョンでの記述まで指南くださったのでベストアンサーとさせていただきました! asmさんみたいにシンプルにリファクタリングされたコードが書けるように精進いたします。 またお力をお貸しいただけたら幸いでございます!ありがとうございました!!!
asm

2019/12/19 06:39

ありがとうございます。 再考したところ、sort_byではなくmax_byでよい事に思い至りましたので編集しておきます。
guest

0

自由記述の重複のカウントは難しいです。
自由記述のちょうふくのカウントは難しいです。

これは1カウントが2つ? それとも2カウントが1つ?

後者は意味解釈が必要になったりするので、私も手に負えません。
意味解釈なしで文字の連続パターンで似ている で「同じもの」とする方法もありますが。

で、前者であるならそうむずかしくはありません。

ary_of_str.group_by{|str| str }. map{|str,ary| [ary.size,str]}. sort.last.last

投稿2019/12/18 03:05

winterboum

総合スコア23567

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

rakuda.io

2019/12/19 01:16

今回は自由記述でなく完全一致でした! 自由記述での意味解釈・・・見当もつかないです。いつかは挑戦してみたいですが・・・ 解決しました!早い回答も感謝です。 ありがとうございました!またお力お貸しください<(_ _)>
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問