gpt4 book ai didi

ruby - ruby 中 * 和 flatten 的意思是什么

转载 作者:数据小太阳 更新时间:2023-10-29 07:10:48 25 4
gpt4 key购买 nike

我是 ruby​​ 语言的新手,所以当我尝试按值对哈希进行排序时我用这个方法排序:

movie_popularity.sort_by{|m,p| p}.reverse

但是 sort 方法返回一个数组,而我需要返回一个散列,所以我使用了这个命令:

movie_popularity=Hash[*movie_popularity.sort_by{|m,p| p}.reverse.flatten]

我的问题是上面一行中的 *flatten 是什么意思?

谢谢 =)

最佳答案

* 被称为“splat 运算符”;我不确定我能否给你技术上的定义(虽然我相信你会在谷歌的帮助下很快找到它),但我描述它的方式是它基本上取代了手写多个代码中的逗号分隔值。

为了使这个更具体,请考虑您在示例中使用的 Hash[] 的情况。 Hash 类有一个 [] 类方法,它接受可变数量的参数,通常可以这样调用:

# Returns { "foo" => 1, "bar" => 2 }
h = Hash["foo", 1, "bar", 2]

请注意,这不是数组、散列或我传入的任何内容;它是一个(手写的)值序列。 * 运算符允许您使用数组实现基本相同的事情——在您的例子中,是 movie_popularity.sort_by{|m,p| 返回的数组。 p}.reverse.flatten.

至于 flatten 调用:当您对哈希调用 sort_by 时,您实际上是在利用 Enumerable 模块,它包含在提供枚举的各种类(最著名的是 ArrayHash)。在哈希的情况下,您可能已经注意到,而不是像这样迭代:

hash.each { |value| ... }

相反,你这样做:

hash.each { |key, value| ... }

也就是说,迭代散列会在每次迭代时产生两个 值。因此,您的 sort_by 调用本身会返回一系列。对此结果调用 flatten 会将这些对折叠成一维值序列,如下所示:

# Returns [1, 2, 3, 4]
[[1, 2], [3, 4]].flatten

关于ruby - ruby 中 * 和 flatten 的意思是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11006897/

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