ruby - 解释 Ruby Array uniq 方法的一个表达式

标签 ruby arrays uniq

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 的值,第二个值也是如此。 cd 也都计算为 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/

相关文章:

ruby - ruby 中有什么好的 OpenDocument 库吗?

ruby - 排序 JSON 值?

ruby - 我有一个 Ruby 对象数组,如何根据这些对象的属性将此数组更改为多个数组?

javascript - 通过 Angular Factory 在 Javascript 中进行过滤、切片、排序

arrays - 将 Active Directory 中的值填充到 VBA 中的数组

linux - 有没有办法使用 uniq 只比较前 n 个字符?

bash - 为列的每个唯一值输出整行一次(Bash)

ruby - Ruby 2.0 中的垃圾收集器调整

选择正确的号码