double [,], int [], bool [] & # 8230; матрица, векторные манипуляции расширения в C #

StackOverflow https://stackoverflow.com/questions/1421125

  •  07-07-2019
  •  | 
  •  

Вопрос

Мне нужно (для быстрого создания прототипов и интеграции библиотек) что-то вроде этого (расширения для обычных массивов)


double[] d;
d.SetRow(1,{ 1.1 , 2.0 ,3.3});
var r = d.GetRow(1);
d = d.AppendRight(new int[]{1,2,3});
...

Существует ли такая вещь где-нибудь? Может быть, кто-нибудь реализовал это, так что мне самому не нужно, я сам?

Это было полезно?

Решение

Это не должно быть слишком сложно, чтобы написать самостоятельно.

Надо очень внимательно следить за тем, как массивы можно редактировать как свойства.

Что-то вроде (очень грубый непроверенный код, но он должен дать вам представление):

public class ArrayRow<T> {
    //add your own ..ctor etc

    T[,] matrix; //don't make this public see http://msdn.microsoft.com/en-us/library/k2604h5s.aspx
    public int Index { get; private set; }

    //note that this will be a copy
    public T[] GetValues() {
        T[] retval = new T[matrix.GetLength(1)];
        for ( int i = 0; i < retval.Length; i++ )
           retval[i] = matrix[Index, i];

        return retval;
    }

    public void SetValues(T[] values)
    //..and so on, you get the idea
}

Затем вы расширяете массив:

public static ArrayExtensions {

    public void SetRow<T> ( this T[,] matrix, int rowIndex, T[] values ) {
        //check rowIndex in range and array lengths match
    }

    public ArrayRow<T> GetRow<T> ( this T[,] matrix, int rowIndex ) {
        //check rowIndex in range
        return new ArrayRow<T> ( matrix, rowIndex );
    }
}

Тогда вы можете положиться на вывод параметра типа.

Другие советы

Просмотрите Math.NET . Это математическая библиотека с открытым исходным кодом. Вы, вероятно, найдете то, что вам нужно.

У них есть пример использования матрицы в конце этой страницы .

Такие языки, как списки поддержки Python со смешанными типами. Вы можете создать скрипт IronPython, а затем вызвать его из своего приложения на C #. Следуйте эту ссылку , чтобы узнать, как вызывать скрипт IronPython из своего приложения.

Я написал библиотеку Matrix Extensions C # для дизайн генерации кода на основе тестовых расширений.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top