2008-11-07 11 views
5

No hay funciones de matriz integradas en C#, pero las hay en el paquete de potencia F #.Acerca del uso de F # para crear un conjunto de Matrix utilizable desde C#

En lugar de usar una biblioteca C# de un tercero o de código abierto, me pregunto si puedo hacer mi propia entrada en F # y exponer los bits útiles a C#.

Me pregunto si alguien ya ha pensado en esto, o lo ha intentado, y si es una buena idea.

¿Debería exponerlo como una clase o como una carga de funciones estáticas?

¿O debería crear una clase contenedora C# y tener esa llamada a F #? ¿O el F # usa la clase C# como entrada y salida?

¿Alguna idea?

respuesta gracias a Hath a continuación: se puede usar la biblioteca # F directamente en C# (operadores, así!):

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(); 
    } 
    } 
} 

Respuesta

6

¿no puede simplemente hacer referencia a la biblioteca f # que necesita en C# y usarla directamente?

que he hecho una cosa similar para hacer referencia al FSharp.Core.dll para llegar a la

Microsoft.FSharp.Math.BigInt class. 

Así que probablemente puede hacer referencia a la FSharp.PowerPack.dll para llegar a la

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

Excelente idea. Lo probaré, aunque sospecho que no obtendré operadores por ese precio. – Benjol

0

Hay muy buenas clases de matriz en XNA Framework. Ya sea que haga referencia a esa dll, o muy probablemente use el reflector y copie y pegue el código en mi propia solución. Sé que no responde su pregunta directamente, sino simplemente otra idea ...

+0

Esas matrices son pequeñas para trabajar con la transformación de gráficos. – cfeduke

Cuestiones relacionadas