首页 > 解决方案 > 如何实现飞镖二进制搜索算法?

问题描述

如何在 dart 主函数中使用这种二进制搜索算法?

int binarySearch<T>(List<T> sortedList, T value,{int Function(T, T)? compare}) {
 compare ??= defaultCompare(); // I do not understand this line code
 var min = 0;
 var max = sortedList.length;
 while (min < max) {
   var mid = min + ((max - min) >> 1);
   var element = sortedList[mid];
   var comp = compare(element, value); // I do not understand this line code 
   if (comp == 0) return mid;
   if (comp < 0) {
     min = mid + 1;
   } else {
     max = mid;
   }
 }
 return -1;
}

为什么要使用这行代码?

{int Function(T, T)? compare} 
compare ??= defaultCompare(); 
var comp = compare(element, value);

标签: algorithmflutterdart

解决方案


??=是一个 null 感知赋值运算符。https://dart.dev/guides/language/language-tour#assignment-operators

代码应该读取compare ??= defaultCompare;这意味着,如果变量comparenull,“撕下”函数defaultCompare并将其分配给变量compare

在 dart 中,函数是一个对象,可以存储在一个变量中。https://dart.dev/guides/language/language-tour#functions-as-first-class-objects

var comp = compare(element, value);正在调用变量中保存的函数compare并将结果分配给新变量comp


推荐阅读