【发布时间】:2023-04-06 08:50:01
【问题描述】:
我有一个包含对象的数组。我想检查数组中的所有元素(对象)是否具有相似的属性值。
所以,如果我们有以下数组
array = [clone1, clone2, clone3]
clone1、clone2 和 clone3 是类 clone 的对象。它们包含一个名为“源”的属性。我想检查 clone1、clone2 和 clone3 是否具有相同的“源”值。
这是一个克隆对象的例子
#<CloneTool:0x007ff968a2f7b0 @nline=["10"], @sim=["100"], @ds=[".."], @dstart=[".."], @dend=[".."], @hs=[".."], @hstart=[".."], @hend=[".."]>
所以我想检查 @ds 的数组是否具有相同的值。
有什么想法吗?
【问题讨论】:
-
ary.all? {|elem| elem.source == ary.first.source} -
ary.any? {|elem| elem.source != ary.first.source} # find one that NOT equal -
@gaussblurinc:通常情况下,您希望明确说明您的意图。看来,他打算检查所有元素是否具有相同的值。检查是否有任何元素具有不同的值在某种程度上掩盖了意图。
-
@SergioTulentsev 就短路而言,它没有区别。
all?在块计算为false时短路,any?在块计算为true时短路。并且由于后者的块是前者的否定,因此它们将在完全相同的示例上短路。 -
@gaussblurinc:sawa 提醒我们
all?也会短路 :)