将复杂地图数据结构转换为F#

将复杂地图数据结构转换为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(); 我曾尝试自己实现这一点并在网上搜索,但我对这门语言的缺乏经验让我失望 有人能告诉我: 此结构的不变实现 可变实现

我对语言F#相当陌生,更不用说函数式编程了,而且我在实现地图数据结构方面遇到了困难。该地图的C#type等价物为:

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)如果第一个映射的值为空映射,我将如何初始化默认值?我想我已经根据这个答案找到了我想要的,非常感谢!您可以执行
        Map.empty
        ,并将元组放入列表中。啊,对不起,你比我快。当然。谢谢您的回复,我对您发布的代码有一些疑问:1)我正在尝试将(int*int)列表与列表中的单个字符相关联,如果可以,您是否能够更新您的答案以适应此情况,2)如果第一个映射的值为空映射,我将如何初始化默认值?我想我已经根据这个答案找到了我想要的,非常感谢!您可以执行
        Map.empty
        ,并将元组放入列表中。啊,对不起,你比我快。当然