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

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

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

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

3回答

2164閲覧

同じ数字を複数含む配列から数字を一つずつ取り除くには?

manman

総合スコア233

Ruby

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2016/01/11 10:56

編集2016/01/11 14:18

ruby

1irb(main):001:0> a = [1, 2, 2, 3, 3, 3] 2=> [1, 2, 2, 3, 3, 3] 3irb(main):002:0> a.delete_at(a.index(2)) 4=> 2 5irb(main):003:0> a 6=> [1, 2, 3, 3, 3]

もっと簡単に、
同じ数字を複数含む配列から数字を一つずつ取り除く
(ただし、同じ数字がある場合はどれを取り除いてもよいものとする。)
にはどうすればいいですか?

(追記)
上記コードにおいて、
delete だと2 が全て消えるので、
2 を一つ選びました。

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

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

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

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

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

guest

回答3

0

ベストアンサー

重複がなくなるまで、1つずつ削除していくようなものを書いてみました。

ruby

1def multis(ary) 2 (0...ary.size).group_by{|x| ary[x]}.reject{|k, v| v.one?} 3end 4 5a = [1, 2, 2, 3, 3, 3] 6 7loop do 8 m = multis(a) 9 break if m.empty? 10 a.delete_at(m.to_a[0][1][0]) 11 p a 12end

実行例:

$ ruby ary.rb [1, 2, 3, 3, 3] [1, 2, 3, 3] [1, 2, 3]

実行例では、配列の重複値がひとつずつ減っていく様子が出力されています。

multi() は
{2=>[1, 2], 3=>[3, 4, 5]}
のように、重複している値に対してだけ、{値 -> その値の index の配列} の配列を返します。
multi() が [] を返せば、重複値が無いことになります。
multi() が [] でなければ、そのなかの先頭のものを delete_at で消していきます。

投稿2016/01/11 21:03

katoy

総合スコア22324

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

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

0

同じ数字を複数含む配列から数字を一つ取り除くには

何をしたいのでしょうか?文章が曖昧で、コードとも一致していません。
[1, 2, 2, 3, 3, 3] を重複を省いて[1, 2, 3]にしたいということであれば、a.uniqです。

投稿2016/01/11 11:05

otn

総合スコア84555

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

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

0

uniq!はどうでしょう!
http://ref.xaio.jp/ruby/classes/array/uniq

投稿2016/01/11 11:04

probaseball

総合スコア113

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問