Share via

2d List Clr

Bent Jensen 1 Reputation point
2021-02-27T21:02:57.02+00:00

Hi all.

I have a problem with what i have understand as "Jagged List"

it creates ok, my problem is to access the columns easy and fast.

value struct triangle {
public:

    double x = 0, y = 0, z = 0;// w = 0;
    // Initiated constructor(dx,dy,dz)
    triangle(double dx, double dy, double dz)
    {
        x = dx;
        y = dy;
        z = dz;
        // w = 1 used for affine matrix transformations...
    };
};




            int i = 0;
    tris->Add(gcnew List<triangle>());
    tris[i]->Add(triangle(0.0f, 0.0f, 0.0f));
    tris[i]->Add(triangle(0.0f, 1.0f, 0.0f));
    tris[i]->Add(triangle(1.0f, 1.0f, 0.0f));
    tris[i]->Add(triangle(0.0f, 0.0f, 0.0f));
    tris[i]->Add(triangle(1.0f, 1.0f, 0.0f));
    tris[i]->Add(triangle(1.0f, 0.0f, 0.0f));

    tris->Add(gcnew List<triangle>());
    i += 1;
    tris[i]->Add(triangle(1.0f, 0.0f, 0.0f));
    tris[i]->Add(triangle(1.0f, 1.0f, 0.0f));
    tris[i]->Add(triangle(1.0f, 1.0f, 1.0f));
    tris[i]->Add(triangle(1.0f, 0.0f, 0.0f));
    tris[i]->Add(triangle(1.0f, 1.0f, 1.0f));
    tris[i]->Add(triangle(1.0f, 0.0f, 1.0f));

    tris->Add(gcnew List<triangle>());
    i += 1;
    tris[i]->Add(triangle(1.0f, 0.0f, 1.0f));
    tris[i]->Add(triangle(1.0f, 1.0f, 1.0f));
    tris[i]->Add(triangle(0.0f, 1.0f, 1.0f));
    tris[i]->Add(triangle(1.0f, 0.0f, 1.0f));
    tris[i]->Add(triangle(0.0f, 1.0f, 1.0f));
    tris[i]->Add(triangle(0.0f, 0.0f, 1.0f));


    tris->Add(gcnew List<triangle>());
    i += 1;
    tris[i]->Add(triangle(0.0f, 0.0f, 1.0f));
    tris[i]->Add(triangle(0.0f, 1.0f, 1.0f));
    tris[i]->Add(triangle(0.0f, 1.0f, 0.0f));
    tris[i]->Add(triangle(0.0f, 0.0f, 1.0f));
    tris[i]->Add(triangle(0.0f, 1.0f, 0.0f));
    tris[i]->Add(triangle(0.0f, 0.0f, 0.0f));

    tris->Add(gcnew List<triangle>());
    i += 1;

    tris[i]->Add(triangle(0.0f, 1.0f, 0.0f));
    tris[i]->Add(triangle(0.0f, 1.0f, 1.0f));
    tris[i]->Add(triangle(1.0f, 1.0f, 1.0f));
    tris[i]->Add(triangle(0.0f, 1.0f, 0.0f));
    tris[i]->Add(triangle(1.0f, 1.0f, 1.0f));
    tris[i]->Add(triangle(1.0f, 1.0f, 0.0f));
    tris->Add(gcnew List<triangle>());
    i += 1;
    tris[i]->Add(triangle(1.0f, 0.0f, 1.0f));
    tris[i]->Add(triangle(0.0f, 0.0f, 1.0f));
    tris[i]->Add(triangle(0.0f, 0.0f, 0.0f));
    tris[i]->Add(triangle(1.0f, 0.0f, 1.0f));
    tris[i]->Add(triangle(0.0f, 0.0f, 0.0f));
    tris[i]->Add(triangle(1.0f, 0.0f, 0.0f));

            int count = tris->Count;
    for (int i = 0; i < 8; i++) {
        tris[i];
        // that is okey
        for (int j = 0; j < 6; j++) {
            tris[i][j];
            int k = 0; // djust for trace
            // That gives error 
            //default get generic list cannot be called
        }
    }

or maybe you out there have a better to write the same thing

regards ollp

Developer technologies | C++
Developer technologies | C++

A high-level, general-purpose programming language, created as an extension of the C programming language, that has object-oriented, generic, and functional features in addition to facilities for low-level memory manipulation.


2 answers

Sort by: Most helpful
  1. WayneAKing 4,936 Reputation points
    2021-03-02T07:56:16.337+00:00

    Another example to digest:

    int count = tris->Count;
    for (int i = 0; i < count; i++) {
        List<triangle>^ lt = tris[i];
        for (int j = 0; j < lt->Count; j++) {
            Console::WriteLine("{0}  {1}  {2}",
                lt[j].x,
                lt[j].y,
                lt[j].z);
        }
        Console::WriteLine();
    }
    
    • Wayne

    Was this answer helpful?

    0 comments No comments

  2. WayneAKing 4,936 Reputation points
    2021-03-02T01:05:04.063+00:00

    int count = tris->Count;
    for (int i = 0; i < 8; i++) {
    tris[i];
    // that is okey
    for (int j = 0; j < 6; j++) {
    tris[i][j];
    int k = 0; // djust for trace
    // That gives error
    //default get generic list cannot be called
    }
    }

    Assuming console output, see if these examples give you any ideas:

    int count = tris->Count;
    for (int i = 0; i < count; i++) {  
        int inner_count = tris[i]->Count;
        for (int j = 0; j < inner_count; j++) {
            Console::WriteLine("{0}  {1}  {2}",
                tris[i]->ToArray()[j].x,
                tris[i]->ToArray()[j].y,
                tris[i]->ToArray()[j].z);            
        }
        Console::WriteLine();
    }
    
    int count = tris->Count;
    for (int i = 0; i < count; i++) {
        int inner_count = tris[i]->Count;
        array<triangle>^ arry = tris[i]->ToArray();
        for (int j = 0; j < inner_count; j++) {            
            Console::WriteLine("{0}  {1}  {2}",
                arry[j].x,
                arry[j].y,
                arry[j].z);
        }
        Console::WriteLine();
    }
    
    • Wayne

    Was this answer helpful?

    0 comments No comments

Your answer

Answers can be marked as 'Accepted' by the question author and 'Recommended' by moderators, which helps users know the answer solved the author's problem.