c = %w(a b c d)
1.8.7 :025 > c.uniq {|x|x[/^a/]}
=> ["a", "b"]
1.8.7 :026 > c.uniq {|x|x[/^b/]}
=> ["a", "b"]
1.8.7 :027 > c.uniq {|x|x[/^c/]}
=> ["a", "c"]
1.8.7 :029 > c.uniq {|x|x =~ [/^c/]}
=> ["a"]
1.8.7 :030 > c.uniq {|s|s[/[^abc]/]}
=> ["a", "d"]
我理解正则表达式,但我不明白 uniq block 是如何工作的。
最佳答案
这有点棘手。
c = %w(a b c d)
1.8.7 :025 > c.uniq {|x|x[/^a/]}
=> ["a", "b"]
此 block 中的 x
是数组中的每个值。您可以通过“字符串是否以 a
开头?”来定义唯一性。值 a
是第一个评估为 true
的值,因此是第一个值。 b
是第一个评估为 false
的值,第二个值也是如此。 c
和 d
也都计算为 false
,但不是唯一的,因为已经找到了计算 false
的值.
1.8.7 :026 > c.uniq {|x|x[/^b/]}
=> ["a", "b"]
这里也是同样的情况。 a
是第一个 (false
),b
是第二个 (true
)。
1.8.7 :027 > c.uniq {|x|x[/^c/]}
=> ["a", "c"]
在这里您可以看到 a
是第一个 false
值,c
是第一个评估为 true
的值因此是第二个唯一值。
1.8.7 :029 > c.uniq {|x|x =~ [/^c/]}
=> ["a"]
在这里,您通过“字符串是否匹配正则表达式数组来定义唯一性,该数组确实匹配不以 c 开头的字符串”。奇怪!
1.8.7 :030 > c.uniq {|s|s[/[^abc]/]}
=> ["a", "d"]
这里您已经定义了一个字符类。您通过“包含 a、b 或 c 的字符串”定义了唯一性。 a
是第一个满足 true
的条件。 d
是唯一评估为 false
的值。
希望有帮助。
关于ruby - 解释 Ruby Array uniq 方法的一个表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7769640/