簡體   English   中英

比較Ruby中的兩個數組

[英]Compare two arrays in Ruby

我想知道兩個Ruby數組是否具有相同的元素,但不一定是相同的順序。 是否有本地方式來做到這一點? Array的相等運算符似乎檢查項目是否相同且順序是否相同,我需要放松后一種情況。

這將非常容易編寫,我只是想知道是否有一個本地成語。

如果您沒有重復項,則可以使用Set而不是Array

Set實現了無序值的集合,沒有重復。 這是Array直觀的互操作設施和Hash快速查找的混合體。

例:

require 'set'
s1 = Set.new [1, 2, 3]   # -> #<Set: {1, 2, 3}>
s2 = [3, 2, 1].to_set    # -> #<Set: {3, 2, 1}>
s1 == s2                 # -> true
[2,1].uniq.sort == [1,2].uniq.sort #=> true
[2,1,4].uniq.sort == [1,2].uniq.sort #=> false

要么

a1 = [1,2,3]
a2 = [2,3,1]
p (a2-a1).empty? && (a1-a2).empty? #=> true

a1 = [1,2,3]
a2 = [4,3,1]
p (a2-a1).empty? && (a1-a2).empty? #=> false

a1 = [1,2,3]
a2 = [2,3,1,5]
p (a2-a1).empty? && (a1-a2).empty? #=> false

這將非常容易編寫,我只是想知道是否有一個本地成語。

我擔心它沒有本土成語。

如果您的數組包含要在兩個數組上計數的多個值,則必須使用#sort將它們按相同的順序排列。 完成后,您可以輕松地比較它們:

a.sort == b.sort

否則,您可以使用#uniq來提取數組的唯一值(以使其更快 )並使用如上所述的#sort

a.uniq.sort == b.uniq.sort
a1 = [1, 2, 3, 4]
a2 = [4, 2, 1, 3]
(a1 & a2).size == a1.size # => true

a3 = [1, 2, 3, 5]
(a1 & a3).size == a1.size # => false

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM