使用 F# 列表

在 C# 中使用 F# 的列表,是完全可能的,但是,我建议不要用,因为,只要再做一点,就会使事情在 C# 看来更加自然。例如,把列表转换成数组很简单,用List.toArray 函数;转换成System.Collections.Generic.List,用 new ResizeArray<_>()构造函数;转换成System.Collections.Generic.IEnumerable,用 List.toSeq 函数。这些类型的使用对于C# 程序员来说,实在是太简单了,特别是System.Array
和System.Collections.Generic.List,因为它们提供了很多的成员方法,可以在列表返回到调用的客户端之前,直接做转换,而在 F# 代码中使用 F# 列表类型完全可行的。MSDN 建议使用System.Collections.ObjectModel 命名空间下的 Collection 或 ReadOnlyCollection公开集合,这两个类都有一个接收IEnumerable 的构造函数,也可以从 F# 列表中构造。

当然,如果需要直接返回 F# 列表,也行,就如下面的例子:

module Strangelights.DemoModule

// gets a preconstructed list

let getList()=

[1; 2; 3]

要在 C# 中使用这个列表,通常用foreach 循环:

using System;

using Strangelights;

usingMicrosoft.FSharp.Core;

usingMicrosoft.FSharp.Collections;

class
Program

{

static
void Main(string[] args)

{

// get the list ofintegers

List<int> ints =
DemoModule.getList();

// foreach over thelist printing it

foreach (int iin ints)

{

Console.WriteLine(i);

}

}

}

示例的运行结果如下:

1

2

3

使用 F# 列表,布布扣,bubuko.com

时间: 2024-12-17 04:42:07

使用 F# 列表的相关文章

6.7.1 用F# 实现列表

虽然我们已经使用过 F# 中的列表,还用 C# 实现了相同的功能,但还没有研究如何用F# 实现列表类型.当我们前面讨论列表时,看到列表既可以表示为空值(nil)(空列表),也可以表示包含元素和引用列表其余部分的 cons cell. 现在,如果我们回顾上一章中有关值的内容,这就像是有两个选项的可选值:微有一点稍不同,列表类型是递归的,因此,cons cell 包含了列表自身类型的值.清单 6.19 是一个列表类型的定义,与 F# 标准库类似. 清单6.19 定义函数式列表类型 (F#) > ty

6.7 处理列表

在第三章,我们讨论过列表,学习了显式使用递归和模式匹配处理列表,还用 C# 实现了函数式列表类型:第 4 章的示例应用程序就以这种方式使用列表,但是要注意,显式写列表处理并不实用. 在这一章,将用到递归模式,因此,你可能已经知道我们下一步要讨论什么了.我们可以使用高阶函数来处理列表,而不必显式使用模式匹配的每种情况:我们已经看到过一些处理 F# 列表的函数,比如 List.map,和处理 C# 集合(Select)的方法很类似.在本节,我们将详细讨论这些内容,通过它们的类型签名,看它们中如何实现

6.7.3 实现列表函数

刚才我们看到的筛选和映射函数,没有展示如何实现,现在,我们要看一个在第三章开始创建的函数.因为所有的列表处理函数都有类似的结构,看过下面的示例以后,实现其他任何函数也是可能的. 在第三章,我们写的函数,能够计算列表中的所有元素的和或积:随后,我们就意识到它可能比开始所表现的更有用:我们看到,它还能用来查找最小或最大元素.那时,我们没有讨论过泛型,因此,函数只处理整数.在清单 6.22 中,有一个类似的函数,没有类型批注,原始约束自动泛型化. 清单 6.22 泛型列表聚合 (F# Interact

python 数据类型: 数字Nubmer / 字符串String / 列表List / 元组Tuple / 集合Set / 字典Dictionary

#python中标准数据类型 数字Nubmer 字符串String 列表List 元组Tuple 集合Set 字典Dictionary #单个变量赋值countn00 = '10'; #整数countn01 = '100.0' #浮点countn02 = "双权"; #字符串countn03 = '10'; #数字#print("整数 = "+countn00,"浮点 = "+countn01,"字符串 = "+countn0

数组与列表相互转换

受 宗策的集合转换为数组TOARRAY() 启发,编写列表与数组互转代码.代表如下 public static void main(String[] args) { // 列表转换为数组 List<String> c=new ArrayList<>(); c.add("A"); c.add("B"); c.add("D"); c.add("E"); c.add("F"); //列表

R语言学习资源

入门视频教程 R语言初级课程(1)- R语言快速入门http://cos.name/videos/intro-2-r/ 代码 #对象 1+1*3 c(1,2,3,4,5) c('helloworld','i am a R user') c("hehe","haha") 1:6 6:1 exp(1:4) log(1:3) a<-c(1,2,3,4,5) a[1] a[1:3] a[-4] a>3 a[a>3] #数组,类型需要一致 x<-1:1

Linux文本过滤与处理命令

文本处理命令在Linux的使用过程中也是很基础的知识,我来总结一下linux文本处理命令的使用. 基础命令: cat / more / less / grep / head / tail / wc  / uniq / cut / sort / join / paste      tr / tee /  split / spell / diff / printf / 1.cat 连接文件并显示内容 -n 对输出的文本进行编号         -b 对输出的文本进行编号,但是不对空白行编号     

13.2.1 访问世界银行的数据

我们在本章使用的数据源,是由世界银行提供的服务,它是为发展中国家提供资金和知识的国际组织.作为其工作的一部分,它需要识别哪种类型的支持最有效,确定需求在哪里,评估对发展中国家的经济,生活质量,环境是否产生了影响.世界银行有一组数据,称为世界发展指标(World Development Indicators),包含了许多国家的信息,而且数据在线可用.在本章,我们将使用有关环境信息,更具体的森林覆盖区域信息.由世界银行提供的数据可免费使用,但是,首先需要在它的网站上进行注册. 提示 要注册,先去 h

R语言 数据集

第二章 创建数据集 1.R语言的数据类型 数值型.字符型.逻辑型.复数型(虚数)和原生型(字节) 2.数据结构 a.向量:存储数值型.字符型和逻辑型数据的一维数组 > a=c(1,2,3,4,5)#创建 组合功能的函数c() > a [1] 1 2 3 4 5 > a[c(1,4)]#访问 方括号+向量中指定的元素 [1] 1 4 b.矩阵:二维数组 mymatrix=matrix(1:20,nrow=5,ncol=4,byrow=TRUE,dimnames=list(rnames,cn