将复杂地图数据结构转换为F#
我对语言F#相当陌生,更不用说函数式编程了,而且我在实现地图数据结构方面遇到了困难。该地图的C#type等价物为:将复杂地图数据结构转换为F#,f#,c#-to-f#,F#,C# To F#,我对语言F#相当陌生,更不用说函数式编程了,而且我在实现地图数据结构方面遇到了困难。该地图的C#type等价物为: var map = new Dictionary<int, Dictionary<int, Tuple<char, Tuple<int, int>[]>[]>>(); var-map=newdictionary(); 我曾尝试自己实现这一点并在网上搜索,但我对这门语言的缺乏经验让我失望 有人能告诉我: 此结构的不变实现 可变实现
var map = new Dictionary<int, Dictionary<int, Tuple<char, Tuple<int, int>[]>[]>>();
var-map=newdictionary();
我曾尝试自己实现这一点并在网上搜索,但我对这门语言的缺乏经验让我失望
有人能告诉我:
let t1 = (2,3)
let t2 = ("a",t1)
let m1 = Map([1,t2])
let m2 = Map([2,m1])
签名如下:
val it : Map<int,Map<int,(string * (int * int))>> = map [(2, map [(1, ("a", (2, 3)))])]
不确定,但可能这对您有帮助:例如:
let t1 = (2,3)
let t2 = ("a",t1)
let m1 = Map([1,t2])
let m2 = Map([2,m1])
签名如下:
val it : Map<int,Map<int,(string * (int * int))>> = map [(2, map [(1, ("a", (2, 3)))])]
不确定,但这可能对您有所帮助:简单的翻译非常简单:
要么变成Dictionary
(如果您想要一个不可变的结构),要么保持原样(如果您想要可变)Map
元组 这种复杂的类型可以分解成一堆别名或缩写,它们可以向人类读者更清楚地表达问题域。例如,您可以:
type Cell=int*int 类型区域=单元格[] 战列舰类型=弦*区 舰队类型=战列舰[] 类型TaskForce=Map 类型Fleet=TaskForce[] 类型NavalTheater=Map
它与上面的类型完全相同,但是对于大多数用例来说,它的可读性要高得多。而且它的开销为零,因为在编译过程中缩写将被简单地替换为本机类型。简单的翻译非常简单:
要么变成Dictionary
(如果您想要一个不可变的结构),要么保持原样(如果您想要可变)Map
元组 这种复杂的类型可以分解成一堆别名或缩写,它们可以向人类读者更清楚地表达问题域。例如,您可以:
type Cell=int*int 类型区域=单元格[] 战列舰类型=弦*区 舰队类型=战列舰[] 类型TaskForce=Map 类型Fleet=TaskForce[] 类型NavalTheater=Map
它与上面的类型完全相同,但是对于大多数用例来说,它的可读性要高得多。而且它的开销为零,因为在编译过程中,缩略语将被简单地替换为本机类型。您的重点是什么?你能不能让现有的类型正常工作,或者你正在尝试创建你自己的类型?@JohnPalmer我更喜欢语法。我可以制作一张地图,我可以制作一个列表,和一个元组,但不是所有这些都交织在这个结构中。你能展示一下你的一些尝试吗?或者用简单的英语解释你想做什么?或者,也许,至少要显示等效的C或VB代码?@FyodorSoikin我在上面发布的C行是我在F中想要实现的,你有什么特别的观点?你能不能让现有的类型正常工作,或者你正在尝试创建你自己的类型?@JohnPalmer我更喜欢语法。我可以制作一张地图,我可以制作一个列表,和一个元组,但不是所有这些都交织在这个结构中。你能展示一下你的一些尝试吗?或者用简单的英语解释你想做什么?或者,也许,至少显示等效的C或VB代码?@FyodorSoikin我在上面发布的C行是我在F中想要实现的。谢谢你的回复,我对你发布的代码有一些疑问:1)我正在尝试将(int*int)列表与列表中的单个字符相关联,如果可以,你是否能够更新你的答案以适应这个问题,2)如果第一个映射的值为空映射,我将如何初始化默认值?我想我已经根据这个答案找到了我想要的,非常感谢!您可以执行
,并将元组放入列表中。啊,对不起,你比我快。当然。谢谢您的回复,我对您发布的代码有一些疑问:1)我正在尝试将(int*int)列表与列表中的单个字符相关联,如果可以,您是否能够更新您的答案以适应此情况,2)如果第一个映射的值为空映射,我将如何初始化默认值?我想我已经根据这个答案找到了我想要的,非常感谢!您可以执行Map.empty
,并将元组放入列表中。啊,对不起,你比我快。当然Map.empty