💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
Lambda 类包含一些方法来以函数式编程风格的方式修改数组和迭代器的内容。很大程度上,多数方法只是在你之前看到的一些局部方法上的一些变化,不同的是,它们比之前看到的影响不同的集合。 Lambda类提供如下方法: |Lambda方法|描述| | -- | -- | |array< A >(it:Iterable< A >):Array< A >|从Iterable< A >创建 Array< A > ,返回Iterable< A >中元素数量| |count< A >(it: Iterable< A >):Int|返回Iterable< A >中元素数量| |empty(it: Iterable< Dynamic >):Bool|验证一个可迭代对象是否不包含任何元素| |exists< A >(it: Iterable< A >, f:A->Bool):Bool|是否至少有一个迭代元素的对象通过指定函数被找到| |filter< A >(it:Iterable< A >,f:A->Bool):List< A >|返回符合指定函数的元素列表| |fold(A,B)(it:Iterable< A >,f:A->B->B, first:B):B|在Iterator< A >上执行fold(折叠)功能| |foreach< A >(it:Iterable< A >,f:A->Bool):Bool|是否所有迭代对象的元素有f指定的属性| |has< A >(it:Iterable< A >, elt:A,?cmp:A->A->Bool):Bool|是否某个元素是迭代对象的部分| |iter< A >(it:Iterable< A >,f:A->Void):Void|应用函数到Iterable< A >的每个元素| |list< A >(it:Iterable< A >):List< A >|从Iterable< A >创建一个List| |map< A,B >(it:Iterable< A >, f:A->B):List< B >|通过应用指定函数从Iterable< A >创建一个Iterable< B >| |mapi< a,b >(it:Iterable< A >,f:Int->A->B):List< B >|和map类似,但是同时会传递每个迭代项的索引| # map() 和 mapi() * * * * * map 和 mapi 方法和List集合的map方法非常相似,不同的是Lambda.map 接收一个迭代器作为第一个参数,返回一个新的迭代器,而Lambda.mapi 执行相同的功能,还传递一个索引到处理函数。这里是两个方法的例子: ~~~ class Mapping { public static function main() { var myArr : Array < Int > = [1, 2, 3, 4]; var newIter : Iterator < Int > ; var funIter = function( x : Int ) : Int { return x * 2; } newIter = Lambda.map( myArr, funIter ); // Outputs: 2, 4, 6, 8 for ( i in newIter ) trace( i ); } } ~~~ # array() 和 list() * * * * * 从一个Array或者List创建迭代器很简单,因为它们都暴露了 iterator() 方法。然而,从迭代器创建一个List或者Array 呢?这正是 Lambda.array() 和Lambda.list() 做的。其中最大的好处是,它们可以非常快速和简单的转换一个 Array 到一个 List ,通过这些代理方法反之亦然: ~~~ var myArr : Array < Int > = [ 1, 2, 3, 4 ]; // Creates the List from the Array var myLst : List < Int > = Lambda.list( myArr ); // Recreates the Array from the List myArr = Lambda.array( myLst ); ~~~ # fold() * * * * * fold 函数非常有用,因为它会使你从一个迭代器应用一个接收每个元素并返回一个基于和开始值计算得出的值的函数生成一个值。这个值然后被带入下一个计算调用下一个迭代器中的值。例如,你传递 fold 函数一个迭代器包含一个整数的列表,一个开始的整数值,和一个带入两个整数并对齐相加的函数。结果就是迭代中所有项相加的和加上开始的整数值: ~~~ class FoldList { public static function main() { var arr : Array < Int > = [1,2,3,4,5]; var fun : Int - > Int - > Int = function( a : Int, b : Int ) : Int { return a + b; } var initialValue : Int = 22; // Outputs: 37 trace(Lambda.fold(arr, fun, initialValue)); } } ~~~