elm - 什么代码更易读/更快,以确保输入中的二进制数字始终为零
问题描述
变体 1
convertToBinary digitsList =
digitsList
|> List.take 4
|> setLastDigitToZero
|> numberFromDigits
setLastDigitToZero digitsList =
Array.fromList digitsList
|> Array.set (lastIndex digitsList) 0
|> Array.toList
lastIndex digitsList =
List.length digitsList - 1
对比
变体 2
convertToBinary digitList =
digitList
|> List.take 3
|> List.reverse
|> List.append [ 1 ]
|> List.reverse
|> numberFromDigits
你怎么看?最重要的是为什么?
解决方案
您似乎想将 4 位数字中的最低有效位设置为零。为此,您可以传入数字数组,使用数组操作将数字设置为零,然后重新组合该数字。
不管你怎么做,这都会很慢。
更快的方法是将数字保持为整数并使用按位运算:
clearLeastSignificantBit : Int -> Int
clearLeastSignificantBit n = Bitwise.and n 0x0E -- 00001110 in binary
这边走:
clearLeastSignificantBit 15 == 14 -- 1111 -> 1110
clearLeastSignificantBit 10 == 10 -- 1010 -> 1010
clearLeastSignificantBit 3 == 2 -- 0011 -> 0010
由于程序员通常都熟悉按位运算,因此它的可读性很强。
推荐阅读
- typescript - TypeScript 不同的类实现具有相同的接口。检查其实例的字段
- javascript - 使用 jquery keyup 事件后,bulma 空间不再在文本区域上工作
- python - Pygame排查黑屏:外星人入侵
- android - 既然 Android Studio 不再创建 R.java,如何找到资源 ID #s?
- javascript - html中脚本插入的奇怪行为
- uitableview - 在单元格内展开表格视图单元格
- arrays - 如何将数组中的第一个匹配项拉出循环?
- java - 更改数据库后更新 ListView
- python - 使用 postgres bigserial 作为自动增量 id 字段和 pk 与更新版本的 django
- .htaccess - .htaccess:从 url 中删除随机数和连字符