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

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

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

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

Q&A

4回答

490閲覧

rubyで配列から重複している要素だけ削除したい

you88

総合スコア147

Ruby

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

0グッド

0クリップ

投稿2021/07/24 08:53

編集2021/07/24 11:23

rubyで配列から重複している要素だけ削除したいと考えているのですがどう書けばいいか分からず。。。教えてもらえると幸いです。

a = [1,2,3,4] b = [3,4,5] 理想の結果 [1,2]

とした際にaからbと重複している3,4のみを削除したいと考えています。bに5のようなaに入っていない要素もある可能性があります。

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

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

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

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

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

Noin

2021/07/24 10:22

回答が目的違いで乱立してるので、最終的にどのような配列になっていれば良いか、何を抽出したいかを追記して頂けると
you88

2021/07/24 11:23

理想の結果を追記させてもらいました!
guest

回答4

0

a-bでいいのでは?

投稿2021/07/24 10:10

sigsegv

総合スコア895

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

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

winterboum

2021/07/25 22:54

それでは [1, 2] になってしまい、b にある 5 が入りません
sigsegv

2021/07/25 23:50

[1,2]が期待する出力ですよね?
winterboum

2021/07/26 00:02

ああ、そうですね。質問を読み違えてました。すみませn
guest

0

まず、検索しましょう

検索力は必須です。

『Ruby 別の配列 重複 削除』と検索してみたところ、
例1例2とかがヒットしました。

例2を使うのなら、一旦『重複する値を取り出して』、『aから重複する値を削除する』的なアルゴリズムが使えそうです。

泥臭い方法(C言語風味)であれば、

1. 配列aの要素数分繰り返す 1.1. 配列bをループさせながら 1.1.1. a[i]とb[j]が同じなら 1.1.1.1. 削除する

的なアルゴリズムでしょうか。

(1.1.1)は逆に『同じでないなら』とかでもいいです。(その場合は1.1.1.1もちょっと変わる)

考え方については私の過去回答を参考にしてください。

投稿2021/07/24 09:14

BeatStar

総合スコア4958

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

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

you88

2021/07/24 11:26

ありがとうございます! 『重複する値を取り出して』を a & b で行い、それをaから引くのが良さそうですね。 c = a & b e = d - c でeが理想の結果になるのかなと
guest

0

「配列から重複している要素だけ削除」だと、言葉通りに受け取るのであれば 次のコードが要件を満たすと考えます

ruby

1a = [1,2,3,4] 2b = [3,4,5] 3pp (a + b).tally 4 .filter { |_key, value| value > 1 } 5 .map { |key, _value| key } 6 .then { |c| (a + b) - c } 7# => [1, 2, 5]

ただ、望む結果が [1, 2] なのは何か説明されていない条件があるのでは...?

投稿2021/07/25 14:53

gouf

総合スコア2321

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

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

0

用途がわからないので適当ですが…

どちらがメインかわかりませんがベタに書くなら全て比較して削除しては?

a.each b.each if anum == bnum

的な感じで、一致したらいずれかかどちらもかわかりませんが削除する感じで

全体のuniqが欲しいなら、concatしてからuniqで重複を削除すればいいかと

投稿2021/07/24 09:13

Noin

総合スコア188

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問