gpt4 book ai didi

ruby - 在该 .map 代码块中引用 .map 返回对象(数组)?

转载 作者:太空宇宙 更新时间:2023-11-03 16:01:34 26 4
gpt4 key购买 nike

在 Ruby 中,是否可以从 .map 代码块中引用使用 .map 函数生成的数组对象?

一个非常简单的例子是,如果您试图只向返回的数组添加唯一元素并想检查该元素是否已经存在,这可能看起来像:

array.map{ |v| v unless (reference to array being created by this map function).include?(v) }

我知道从功能上讲这段代码是不必要的,因为您可以简单地在数组上使用 .uniq 方法或将值插入一个单独的数组并检查该数组是否已经包含该值,我是只是想知道这在概念上是否可行,因为我遇到过几次这样的引用会很有用。谢谢。

最佳答案

据我所知在 map 上没有。但是,您可以使用 reduceinject 来引用集合。所以:

array.reduce([]) {|memo, v| memo << v unless memo.include? v; memo }

或者...

array.inject([]) do |memo, v| 
memo << v unless memo.include? v
memo
end

澄清一些关于reduce的问题,reduce的最终返回值变成了memo,但是如果你返回v而不是memo,v就变成了memo,它首先传递一个数组[1,2,3,2,1] 将是 1。因此您的聚合结果将被删除。所以你需要将它添加到聚合中并返回聚合。

注意:我同意大多数评论者的观点,uniq 是更好的方式,因为它似乎是一个更明确的意图陈述,而且从性能上来说立场。参见 this gist了解详情。

关于ruby - 在该 .map 代码块中引用 .map 返回对象(数组)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23861058/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com