IMatrix.CreateIterator

Синтаксис Fore

CreateIterator: IMatrixIterator;

Синтаксис Fore.NET

CreateIterator: Prognoz.Platform.Interop.Matrix.IMatrixIterator;

Описание

Метод CreateIterator создает итератор, используемый для навигации по элементам матрицы.

Комментарии

Для создания объекта, представляющего собой координату в матрице, используйте метод IMatrix.CreateCoord.

Пример Fore

Для выполнения примера добавьте ссылку на системную сборку «MathFin» и «Matrix».

Sub UserProc;
Var
    M: Matrix[
2];
    Mm: IMatrix;
    Iter: IMatrixIterator;
    Coord: IMatrixCoord;
    x, y: Integer;
Begin
    
For x := 0 To 4 Do
        
For y := 0 To 4 Do
            M[x, y] := Math.RandBetweenI(
09);
        
End For;
    
End For;
    Mm := M 
As IMatrix;
    Debug.WriteLine(
"Исходная матрица");
    Iter := Mm.CreateIterator;
    Iter.Move(IteratorDirection.First);
    
While Iter.Valid Do
        Debug.WriteLine(Iter.Value + 
" " + Iter.ValueFlag.ToString);
        Iter.Move(IteratorDirection.Next);
    
End While;
    Mm.ValueFlag := 
1;
    
//
    Coord := Mm.CreateCoord;
    Coord.Item(
0) := 0;
    Coord.Item(
1) := 0;
    Mm.Item(Coord) := 
11;
    Coord.Item(
0) := 2;
    Coord.Item(
1) := 2;
    Mm.Item(Coord) := 
13;
    
// значение флага, используемого в матрице для отметки изменившихся значений
    Mm.ValueFlag := 2;
    Coord.Item(
0) := 1;
    Coord.Item(
1) := 1;
    
// значение элемента матрицы в заданной координате
    Mm.Item(Coord) := 12;
    Coord.Item(
0) := 3;
    Coord.Item(
1) := 3;
    Mm.Item(Coord) := 
14;
    Debug.WriteLine(
"До изменения флага");
    Iter.Move(IteratorDirection.First);
    
While Iter.Valid Do
        Debug.WriteLine(Iter.Value + 
" " + Iter.ValueFlag.ToString);
        Iter.Move(IteratorDirection.Next);
    
End While;
    
// изменение флага
    Mm.ChangeValueFlag(110);
    Debug.WriteLine(
"После изменения флага");
    Iter := Mm.CreateIterator;
    Iter.Move(IteratorDirection.First);
    
While Iter.Valid Do
        Debug.WriteLine(Iter.Value + 
" " + Iter.ValueFlag.ToString);
        Iter.Move(IteratorDirection.Next);
    
End While;
End Sub UserProc;

После выполнения примера будет создана матрица, содержащая случайные значения. В данной матрице будут изменены значения четырех диагональных элементов. Значения будут изменяться с различным флагом. После этого для элементов, измененных с флагом матрицы "1" будет изменено значение флага на "10". Значения элементов и соответствующие им флаги будут выведены в консоль среды разработки.

Пример Fore.NET

Для выполнения примера добавьте ссылку на системную сборку «MathFin», «Matrix» и «ForeSystem».

Imports Prognoz.Platform.Interop.MathFin;
Imports Prognoz.Platform.Interop.Matrix;
Imports Prognoz.Platform.Interop.ForeSystem;

Public Shared Sub Main(Params: StartParams);
Var
    //M: Matrix[2];
    M: Array;
    Mm: IMatrix;
    Iter: IMatrixIterator;
    Coord: IMatrixCoord;
    Math: MathClass = New MathClass();
    x, y: Integer;
Begin
    For x := 0 To 4 Do
        For y := 0 To 4 Do
            M[x, y] := Math.RandBetweenI(09);
        End For;
    End For;
    Mm := M As IMatrix;
    System.Diagnostics.Debug.WriteLine("Исходная матрица");
    Iter := Mm.CreateIterator();
    Iter.Move(IteratorDirection.itdFirst);
    While Iter.Valid Do
        System.Diagnostics.Debug.WriteLine(Iter.Value + " " + Iter.ValueFlag.ToString());
        Iter.Move(IteratorDirection.itdLast);
    End While;
    Mm.ValueFlag := 1;
    //
    Coord := Mm.CreateCoord();
    Coord.Item[0] := 0;
    Coord.Item[1] := 0;
    Mm.Item[Coord] := 11;
    Coord.Item[0] := 2;
    Coord.Item[1] := 2;
    Mm.Item[Coord] := 13;
    // значение флага, используемого в матрице для отметки изменившихся значений
    Mm.ValueFlag := 2;
    Coord.Item[0] := 1;
    Coord.Item[1] := 1;
    // значение элемента матрицы в заданной координате
    Mm.Item[Coord] := 12;
    Coord.Item[0] := 3;
    Coord.Item[1] := 3;
    Mm.Item[Coord] := 14;
    System.Diagnostics.Debug.WriteLine("До изменения флага");
    Iter.Move(IteratorDirection.itdFirst);
    While Iter.Valid Do
        System.Diagnostics.Debug.WriteLine(Iter.Value + " " + Iter.ValueFlag.ToString());
        Iter.Move(IteratorDirection.itdNext);
    End While;
    // изменение флага
    Mm.ChangeValueFlag(110);
    System.Diagnostics.Debug.WriteLine("После изменения флага");
    Iter := Mm.CreateIterator();
    Iter.Move(IteratorDirection.itdFirst);
    While Iter.Valid Do
        System.Diagnostics.Debug.WriteLine(Iter.Value + " " + Iter.ValueFlag.ToString());
        Iter.Move(IteratorDirection.itdNext);
    End While;
End Sub;

См. также:

IMatrix