例えば['a', 'b', 'c']
という配列と['a', 'c', 'b']
のような、順番が違うだけで中の要素は同じ2つの配列があった場合、この2つの配列の中身が一緒であると確認する方法をご存知の方がいらっしゃいましたら教えていただきたいです。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答3件
0
賢い方法があるかもですが
(a-b)+(b-a) == []
とか a.sort == b.sort
とか
後者はnilとか、比較できないものが混じってる可能性あるとだめですが
投稿2020/11/09 11:57
総合スコア23567
0
ベストアンサー
ソートして比較するのが手軽かと思います。
ruby
1a = ['a', 'b', 'c'] 2b = ['a', 'c', 'b'] 3 4a.sort == b.sort
投稿2020/11/09 11:56
総合スコア146018
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
a & b == a はいかがでしょう。 次の stackoverflow にあった回答です。
参考情報
- Check if two arrays have the same contents (in any order)
https://stackoverflow.com/questions/10919783
扱う Array の種類によっては、a.sort == b.sort で済む場合もあります。
r.rb
ruby
1# frozen_string_literal: true 2 3def comp_array(a, b) 4 ## a.sort == b.sort 5 ## (a - b) + (b - a) == [] 6 ## !a.map { |n| b.include?(n) }.include?(false) 7 # a.group_by { |i| i } == b.group_by { |i| i } 8 a & b == a 9end 10 11TESTS = [ 12 [[], [], true], 13 [[1], [1], true], 14 [[1], [2], false], 15 [[1, 2], [1, 2], true], 16 [[1, 1, 2], [1, 2], false], 17 [[1, 'a'], ['a', 1], true] 18].freeze 19z = TESTS.reject do |a, b, c| 20 comp_array(a, b) == c 21end 22print(z)
投稿2020/11/09 12:39
総合スコア22324
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2020/11/09 15:15
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2020/11/09 15:15