有没有一种简单的方法来检查两个数组是否包含相同的元素?
这是我的尝试,如果数组不相同,我返回true
:
arr1 := #(1 3 5 6).
arr2 := #(1 2 3 4).
arr2Copy := arr2 copyFrom: 1 to: arr2 size.
arr1 size ~= arr2 size
ifTrue: [^ true].
arr1
do: [:a | (arr2copy removeFirst = a)
ifFalse: [^ true]].
^false
答案 0 :(得分:7)
如果元素应该相等并且以相同的顺序,您可以将数组与 = 进行比较。
如果元素应相等且顺序无关紧要并且没有没有重复项,请使用{{1} }。
否则,您可以签出 hasEqualElements:和 asBag 。
如果元素应该相同和相同顺序,怎么办?
array1 asSet = arr2 asSet
它同时迭代两个数组,比较相同索引处元素的标识。如果不相同,则返回false。如果没有遇到不同的元素,则返回true。
答案 1 :(得分:3)
作为附带说明,请注意,您的代码几乎正确。只需更改:
arr2Copy := arr2 copyFrom: 1 to: arr2 size.
具有以下内容:
arr2copy := arr2 asOrderedCollection.
,您的代码即可使用。原因是您无法从removeFirst
来Array
。这就是为什么您需要OrderedCollection
的原因。 (请注意,arr2copy
的大小写不匹配。)
当然,这种实现方式没有公认的答案有效,但是我认为也可以向您提供一些有关您的方法的反馈。