繁体   English   中英

如何在F#中创建一维,基于非零的数组

[英]How to create a single-dimensional, non-zero-based array in F#

我试图在F#中创建一维的,不基于零的数组。 我需要这样的数组才能与另一种编程语言编写的代码实现互操作性。 Array2D.createBased函数旨在创建一个二维的,不基于零的数组,但是F#语言缺少Array.createBased函数来创建一个二维的,不基于零的数组。 因此,我尝试编写自己的函数,但是它不起作用。 它的代码在这里:

let createBased base1 length1 (initial : 'a) =           
       // the problem is here: System.Array ('a [*]) is not convertible to array ('a []), 
       // so InvalidCastException error is raised at run-time
       let A = Array.CreateInstance (typeof<'a>, [| length1 |], [| base1 |]) :?> 'a [] 

       for i in A.GetLowerBound(0) .. A.GetUpperBound(0) do A.[i] <- initial 
       A

请帮忙!

.NET通常不支持这些数组( http://msdn.microsoft.com/zh-cn/library/x836773a.aspx-感谢链接eis)。

但是,可以提供一种允许您使用F#语法的简单解决方案。

这是一个非常简单的例子

open System
type Hack() =
    let A = Array.CreateInstance (typeof<int>, [| 5 |], [| 5 |])
    member x.Item with get(y:int) = A.GetValue(y) and set (v:int) (y:int) = A.SetValue(y,v)

let a = new Hack()
printfn "%A" (a.[8])
a.[8]<-1
printfn "%A" (a.[8])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM