2008-11-07 4 views
5

Il n'y a pas de fonctions matricielles intégrées en C#, mais il y en a dans le powerpack F #. Plutôt que d'utiliser une bibliothèque C# tierce ou open source, je m'interroge sur le fait de lancer la mienne en F # et d'exposer les bits utiles à C#.A propos de l'utilisation de F # pour créer un ensemble Matrix utilisable à partir de C#

Je me demandais si quelqu'un a déjà pensé à cela, ou l'a essayé, et si c'est une bonne idée.

Devrais-je l'exposer en tant que classe, ou une charge de fonctions statiques?

Ou devrais-je créer une classe wrapper C#, et avoir cet appel à F #? Ou est-ce que le F # utilise la classe C# comme entrée et sortie?

Des pensées?

Réponse grâce à Hath ci-dessous: vous pouvez utiliser la bibliothèque F # directement en C# (opérateurs aussi bien!):

using System; 
using System.Text; 
using Microsoft.FSharp.Math; 

namespace CSharp 
{ 
    class Program 
    { 
    static void Main(string[] args) 
    { 

     double[,] x = { { 1.0, 2.0 }, { 4.0, 5.0 } }; 
     double[,] y = { { 1.0, 2.0 }, { 7.0, 8.0 } }; 
     Matrix<double> m1 = MatrixModule.of_array2(x); 
     Matrix<double> m2 = MatrixModule.of_array2(y); 
     var mp = m1 * m2; 

     var output = mp.ToArray2(); 
     Console.WriteLine(output.StringIt()); 

     Console.ReadKey(); 
    } 
    } 

    public static class Extensions 
    { 
    public static string StringIt(this double[,] array) 
    { 
     var sb = new StringBuilder(); 
     for (int r = 0; r < array.Length/array.Rank; r++) 
     { 
      for (int c = 0; c < array.Rank; c++) 
      { 
       if (c > 0) sb.Append("\t"); 
       sb.Append(array[r, c].ToString()); 
      } 
      sb.AppendLine(); 
     } 
     return sb.ToString(); 
    } 
    } 
} 

Répondre

6

ne pouvez-vous pas simplement référencer la bibliothèque f # dont vous avez besoin dans C# et l'utiliser directement?

Je l'ai fait une chose semblable à la référence FSharp.Core.dll pour obtenir au

Microsoft.FSharp.Math.BigInt class. 

vous pouvez donc faire référence probablement le FSharp.PowerPack.dll pour obtenir au

Microsoft.FSharp.Math.Matrix<A> class 
+0

Excellente idée. Je vais essayer, bien que je soupçonne que je n'obtiendrai pas d'opérateurs à ce prix. – Benjol

0

Il y a de très bonnes classes de matrice dans le XNA Framework. Je référencerais cette DLL, ou très probablement utiliser un réflecteur et copier et coller le code dans ma propre solution. Je sais que cela ne répond pas directement à votre question, mais juste une autre idée ...

+0

Ces matrices sont petites pour travailler avec des graphiques en transformation. – cfeduke

Questions connexes