我想在Scala中编写一个二进制搜索程序,而根本不使用任何if-else语句。我设计的基本策略使用array [mid]和search_key之间的比较返回值。简而言之:
1)根据array [mid]和search_key
之间的比较生成返回值2)使用该返回值创建唯一字符串。
3)使用'反射'借助该字符串
所以我的问题是......在这种情况下是否存在返回不同值的计算逻辑?我怎样才能实现这一目标?例如:
if array[mid] == search_key , return 0
if array[mid] > search_key , return 1
if array[mid] < search_key , return 2
如果有人对此问题有任何更好的解决方案,请同时建议。
答案 0 :(得分:2)
执行类似操作的简单方法是
array(mid) compareTo search_key
这一行相当于
if (array(mid) == search_key) 0
else if (array(mid) < search_key) -1
else 1 // if (array(mid) > search_key)
至于执行此操作的最佳方式,您可以执行一系列操作,并计算该序列的索引。如果您有兴趣,可以在https://gist.github.com/kolmar/bcfc94ee4051ee7eb3a1
中查看完整代码