戴夫·托马斯(Dave Thomas)的数据修补Kata的快速解决方案,第1部分

戴夫·托马斯(Dave Thomas)的数据修补Kata的快速解决方案,第1部分

我正在Swift中解决Dave Thomas的代码问题,并将分享我的思考过程和解决方案。 以下是我对“数据整理” kata [项目回购]的第1部分的解决方案。 挑战在于分析一个混乱的,真实世界的数据集。

在weather.dat中,您将找到2002年6月在新泽西州莫里斯敦的每日天气数据。下载此文本文件,然后编写程序以输出温度分布最小(最大温度为第二列)的天数(第1列)。 ,最小的第三列)。

  • 为了摆脱不需要的列,removeUnneededColumns()在每行上循环并仅保留前三个单元格。 该方法可以正常工作,但是很丑陋,需要改进(有什么建议吗?)。
  • 注意,并非我们的所有数据点都是“干净的”,有些包含垃圾信息,例如“ *”。 为了在cleanData()中解决此问题,我们创建了一组无效字符并将其删除。
 让invalidCharachters = NSCharacterSet(charactersInString:“ 0123456789。”)。invertedSet 

要注意的另一件事(我在此kata之前就很模糊)是,当您在Swift中嵌套了高阶函数时,就无法使用简写语法(例如array.map {$ 0 * 2}),您需要列出参数并使用“ in”关键字

气象记录评估员

现在,我们已经加载了数据,对其进行了整理,对其进行了清理,并将其转换为WeatherRecords数组,我们需要找到温度变化最小的日期。 由于WeatherRecord结构具有计算的属性temperatureDelta:

  var temperatureDelta:Double { 
 返回maximumDailyTemperature — minimumDailyTemperature 
  } 

我们需要做的就是遍历记录并找到增量最小的记录。 minElement()方法将执行此操作(请注意,由于我们不使用嵌套闭包,因此我们将返回使用更简洁的$ 0,$ 1语法)。

执行者

现在,我们拥有解决此kata所需的所有组件,我们只需要将它们放在一起并获得正确的答案。 我们将使用一个Executor结构来执行此操作,该结构使用先前方法的输出来调用每个方法并返回答案。 execute()的单元测试还充当集成测试,用于验证一切是否按预期进行。

我将在本系列的其他kata后面编写我的解决方案和思考过程。 请让我知道什么有用,什么没用。 另外,我很想听听您关于如何改进代码任何部分的想法。