2010-03-01 4 views
2

Comment est-ce que je peux surcharger [] pour un tableau F # pour découper un tableau basé sur un tableau d'index arbitraire?F # tableau de découpage par tableau d'indices

Par exemple:

let x = [|1..10|]; 
let indx = [|4;1|]; 

bien

[| for i in indx ->x.[i]|] 

fonctionnerait, il serait plus agréable d'être en mesure utilisant x.[indx] directement.

+2

Votre exemple n'effectue pas * slicing * - il récupère uniquement différents éléments du tableau. Trancher serait f.ex. être 'x. [2..6]' – Frank

Répondre

5

Vous pouvez toujours écrire une méthode d'extension F # pour se rapprocher de la syntaxe

let a = [| 1..10 |] 
let idx = [|4;1|] 

type 'T ``[]`` with //' 
    member this.Slice(indices:int array) = 
     [| for i in indices -> this.[i] |] 

printfn "%A" (a.Slice idx) 

mais puisque les tableaux ont déjà un indexeur il ne semble pas qu'il y ait un moyen de surcharger/changer.