Mesomorphic出版了一系列关于在家工作的指南, 经许可,我们在此全文转载, 但是我强烈建议你 访问他们的网站 获取最新的信息
夏洛特最近没能去健身房, 由于冠状病毒的封锁,她被困在家里. 她不得不做很多俯卧撑来应付, 她一直在仔细记录自己每天能做多少个俯卧撑. 每天的总数被添加到一个Ruby数组中:
Daily_push_up_totals = [10, 15, 25, 27, 30, 50, 55, 55, 60, 62, 62, 65, 65, 66]
RubyCopy
夏洛特想知道两件事:她每周做了多少个俯卧撑, 她最大的进步是一天天的.
计算夏洛特每周做俯卧撑的总次数, 一种方法是使用 each_slice
. 这个Array方法将数组划分为节(或片),并将每个节传递给块. 每个部分中的值的数量作为参数传入. 举个例子:
daily_push_up_totals.Each_slice (7) {|week_totals > | print weekly_totals}
RubyCopy
会导致:
[10, 15, 25, 27, 30, 50, 55][55, 60, 62, 62, 65, 65, 66]
ConsoleCopy
我们已经成功地将数组分成了7个值的切片, 因此,我们所需要做的就是将每个切片加起来,以获得每周总数 总和
:
daily_push_up_totals.each_slice (7) {|week_totals . |放置“每周总计:#{week_totals . #”.总和}}
RubyCopy
导致:
每周总数:212
每周总数:445
ConsoleCopy
可以使输出更有用 with_index
:
daily_push_up_totals.each_slice (7).with_index(1) {|week_totals, week_number|将“周#{week_number}: #{week_totals . #.总和}}
RubyCopy
这将给我们:
第1周的总数是212
第二周总共445美元
ConsoleCopy
那么我们怎样才能算出夏洛特每天最大的进步呢? 让我们试着使用 each_cons
. 这个Array方法为给定的块提供 n
连续的元素,依次从每个元素开始. 困惑? 举个例子可以让事情更清楚:
daily_push_up_totals.Each_cons(2){|值|打印值}
RubyCopy
将返回:
[10, 15][15, 25][25, 27][27, 30]...
ConsoleCopy
等等.......
鉴于这种, 计算最大的逐日改进是找出每对每日总数之间的差异, 求最大值:
daily_push_up_totals.each_cons (2).Map {|day1, day2| day2 - day1}.马克斯
RubyCopy
返回:
20
ConsoleCopy
我们完成了-夏洛特现在可以跟踪她的进展无论封锁持续多久.
多亏了 亚当·L. 沃森 在这篇文章的前一个版本中发现了一个错误.
我很想听听你的想法 each_slice
, each_cons
你为它们找到的用途,事实上,在封锁期间锻炼. 为什么不在下面留言呢?