質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby

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

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

1回答

3218閲覧

配列の結合について - 重複したもののみ結合する

Hello

総合スコア25

Ruby

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

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

1グッド

1クリップ

投稿2016/10/25 08:13

今、2つの配列の要素で重複したものだけ結合して、1つの配列にしたい処理を書いております。

arr1 = [1,2,3,4,5,6,7,8,9]
arr2 = [2,2,5,7,7,10,12]

得たい結果は重複した場合のみarr1に追加したいです。
[1,2,3,4,5,6,7,8,9,2,2,5,7,7]

ruby

1arr2.each do |n| 2 if arr1.include?(n) 3 arr1.push(n) 4 end 5end

上記のようなコードを自分なりに書いてみたのですが、結果が下記のようになり、思い通りの結果になりませんでした。

[1,2,3,4,5,6,7,8,9,2]
[1,2,3,4,5,6,7,8,9,2]
[1,2,3,4,5,6,7,8,9,5]
[1,2,3,4,5,6,7,8,9,7]
[1,2,3,4,5,6,7,8,9,7]

アドバイスをいただけますと幸いです。

DrqYuto👍を押しています

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

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

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

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

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

guest

回答1

0

ベストアンサー

arr1arr2 両方に含まれる要素は arr1 & arr2 で得る事ができます。

ruby

1arr1 & arr2 # => [2, 5, 7]

と、いう事で Hello さんの書き方をベースにこれ(積集合)を使って書くと

ruby

1arr2.each do |n| 2 if (arr1 & arr2).include?(n) 3 arr1.push(n) 4 end 5end 6arr1 7# => [1, 2, 3, 4, 5, 6, 7, 8, 9, 2, 2, 5, 7, 7]

ですね。

1行で書くなら

ruby

1arr1.concat(arr2.select{ |n| (arr1 & arr2).include?(n) }) 2# => [1, 2, 3, 4, 5, 6, 7, 8, 9, 2, 2, 5, 7, 7]

とも書けますね。

ちなみにどちらも arr2 の要素数だけ arr1 & arr2 をしてしまうので最初に別途変数に入れておいた方がいいですね。


もっとうまい書き方もあると思うので

この辺とにらめっこしてみてください。

投稿2016/10/25 08:22

編集2016/10/25 08:30
hana-da

総合スコア1728

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

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

Hello

2016/10/25 09:00

ありがとうございます! 思い通りの結果が取得できました。 とっても勉強になりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問