arrays - Ruby数组:在链接方法时获取所有具有最大值的元素(即,没有排序数组的句柄)
问题描述
假设您需要获取数组中具有最大值的所有元素。
一种可能的方法是sort
数组然后使用Enumerable#take_while
:
array = [ 1, 3, 2, 3, 2, 3 ].sort {|a,b| b - a}
array.take_while { |e| e == array[0] }
#=> [3, 3, 3]
现在,当您漂亮地链接方法并且不想仅仅为了存储排序数组(您需要它来引用take_while
块中的第一个元素)而停止链时,您会怎么做?
我在下面发布了问题和答案以供参考,但我可能错过了更好的方法,所以请随意发布您自己的方法
解决方案
另一种方式:
arr = [ 1, 3, 2, 3, 2, 3 ]
arr.sort {|a,b| b - a}.tap { |a| a.select! { |e| e == a.first } }
#=> [3, 3, 3]
请注意,arr
它没有突变。
推荐阅读
- c# - HttpContext.Current.User.Identity.Name 为空,在 IIS 网站的子文件夹中带有 Form.authentication
- macos - Mac Os Catalina 中 /usr/bin 的符号链接
- javascript - 无法使用 javascript 读取 python 生成的 JSON
- r - 尝试将 2.5 gb csv 文件读入 R 时出错
- python - 用相同的颜色绘制每个集群
- informatica - 支持 Informatica 集成分配步骤中的可选参数
- excel - 配置模块
- html - 可以在 css 文件中设置 contenteditable 吗?
- swift - 如何使用 2 个 Swift 协议创建观察者模式,其中两个关联类型必须相同?
- java - logback-spring.xml 中的 LogstashTcpSocketAppender 不会将日志发送到 ELK 但适用于基于 Java 的方法