6.8.2 列表的绑定操作
来源:互联网 发布:python开发spark 编辑:程序博客网 时间:2024/06/05 10:04
6.8.2 列表的绑定操作
我们只讨论了选项值的绑定操作,但正如我们将在第 12 章看到的,它通常是非常重要的函数式操作。清单 6.26 显示了选项值绑定操作的类型签名,以及如果我们定义列表的绑定操作,它看起来又会怎样。
Listing 6.26 Signatures of bind operations (F#)
Option.bind : ('a -> 'b option) -> 'a option -> 'b option
List.bind : ('a -> 'b list) -> 'a list -> 'b list
List.bind 函数在 F# 库的不同名字下是可用的,因此,我们会尝试弄清楚,使用类型签名它做什么。输入是一个列表,并且对于每个元素,它可以获取有其他类型值的列表。这种类型的列表也是作为结果从这个绑定操作返回。
在实践中,这意味着,这个操作为每个元素调用给定的函数,并将从该函数返回的列表连接起来。F# 库中,这个函数称为 List.collect。类似的操作在 LINQ 中也是可用的,对于一种特殊类型的查询是非常重要的。我们将在第 12 章更详细地讨论它。
我们使用 List.collect 函数,可以从给定的目录列表中获得所有文件的列表。注意,一个目录通常包含一系列文件。清单 6.27 显示了,我们如何列出这一章所有的源代码文件。
Listing 6.27 Listing files using collect (F# Interactive)
> open System.IO;;
> let directories =
[ "C:/Source/Chapter06/Chapter06_CSharp";
"C:/Source/Chapter06/Chapter06_FSharp";
"C:/Source/Chapter06/FunctionalCSharp" ];;
val directories : string list
> directories |> List.collect (fun d –>
d |> Directory.GetFiles
|> List.ofSeq
|> List.map Path.GetFileName );;
val it : string list =
[ "Chapter06_CSharp.csproj"; "Program.cs"; "Chapter06_FSharp.fsproj";
"Script.fsx"; "FunctionalCSharp.csproj"; "List.cs";
"Option.cs"; "Tuple.cs" ]
集合操作为输入列表中的每个目录调用给定的 lambda 函数。然后,这个 lambda 函数从该目录中获取所有文件,把它们从数组转换成列表,并使用 List.map,从完整路径得到文件名。然后,结果会收集到一个列表中,作为整个的结果返回。你可能不会感到诧异,此操作在 .NET 3.5 中也是可用的,它表示为 SelectMany 方法。当在 C# 3.0 的查询表达式中指定多个 from 子句,要使用这个方法。
- 6.8.2 列表的绑定操作
- 6.8.2 列表的绑定操作
- 操作对象数组 或数组 绑定后台序列化后的列表对象 将列表序列化成对象
- 下拉列表的动态绑定(2种)
- 绑定列表
- 关于angularjs的下拉列表的绑定
- 对象集合与列表控件的绑定
- 自动绑定列表控件的数据
- 顺序列表的操作
- 列表的一些操作
- 列表的常用操作
- 列表的基本操作
- 下拉列表与数组列表ArrayList的绑定
- datagridview 绑定后的操作
- Hibernate的绑定变量操作
- [Zigbee]绑定操作的时间
- 下拉列表的相关操作
- 遍历操作列表的算法
- SQL Server中四类事务并发问题的实例再现(转)
- C#调用存储过程
- Eclipse设定文件的默认打开方式
- cydia 更新后 进入 显示 “无法加载 不被信任的服务器证书”
- Domino Web开发
- 6.8.2 列表的绑定操作
- gdb-7.1 移植到HISI3512
- 用友+花生壳实现不同网络环境互访
- 软件工程师:如何学习Java经验总结
- 该行已经属于另一个表 的解决
- 数据结构题 怎么做
- xen串口调试配置(双机)
- RootExplorer怎么样获取root权限的——续
- java call crystal reports Export to pdf