加入今天

锁定期间的练习:看看Ruby的数组each_cons和each_slice方法

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| put“周#{week_number}: #{week_totals。.总和}}

RubyCopy

这将给我们:

    第1周的总数是212
    第二周总共445美元

ConsoleCopy

那么我们怎样才能算出夏洛特每天最大的进步呢? 让我们试着使用 each_cons. 这个Array方法为给定的块提供 n 连续的元素,依次从每个元素开始. 困惑? 举个例子可以让事情更清楚:

daily_push_up_totals.Each_cons (2){|values|打印值}

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_sliceeach_cons你为它们找到的用途,事实上,在封锁期间锻炼. 为什么不在下面留言呢?

滚动到顶部
X