Resolved How do I group pairs of List<double> in a List<List<double>>

bhs67

Well-known member
Joined
Oct 11, 2021
Messages
52
Programming Experience
10+
I have 6 lists.

C#:
List<double> listdSignal0X = new List<double>();
List<double> listdSignal0Y = new List<double>();
List<double> listdSignal1X = new List<double>();
List<double> listdSignal1Y = new List<double>();
List<double> listdSignal2X = new List<double>();
List<double> listdSignal2Y = new List<double>();

I want to group them in XY pairs in a List<List<double>>.

C#:
List<List<double>> listlistdXYSignals = new List<List<double>>;
listlistdXYSignals.Add(listdSignal0X);
listlistdXYSignals.Add(listdSignal0Y);
listlistdXYSignals.Add(listdSignal1X);
listlistdXYSignals.Add(listdSignal1Y);
etc.

This does not group them in pairs. I want

C#:
listlistdXYSignals[0] ... to retrieve both ... listdSignal0X ... and ... listdSignal0Y
listlistdXYSignals[1] ... to retrieve both ... listdSignal1X ... and ... listdSignal1Y
etc
 
Solution
It works to create:

C#:
List<Point> listPointsTop = new List<Point>();
List<Point> listPointsMiddle = new List<Point>();
List<Point> listPointsBottom = new List<Point>();

then

C#:
CreateXYPoints(, ref listPointsTop);
CreateXYPoints(listdSignal1X, listdSignal1Y, ref listPointsMiddle);
CreateXYPoints(listdSignal2X, listdSignal2Y, ref listPointsBottom);
 
private void CreateXYPoints(List<double> listdSignalX, List<double> listdSignalY, ref List<Point> listPoints)
{
  int iNumOfPoints = listdSignalX.Count;
  for (int ii = 0; ii < iNumOfPoints; ii++) {
    double dX = listdSignalX[ii];
    double dY = listdSignalY[ii];
    Point pt = new Point(dX, dY);
    listPoints.Add(pt);
  };
}//CreateXYPoints

Then use:

C#:
...
You'll want to have a List<Tuple<List<double>,List<double>>> instead.
 
I have:

C#:
List<Tuple<List<double>, List<double>>> listtupledSignals = new List<Tuple<List<double>, List<double>>>();
listtupledSignals.Add(listdSignalX, listdSignalY);

Error message, "No overload for method 'Add' takes 2 arguments".

The pairs of XY lists are the same length. Each pair of XY lists could be different lengths. Signal1X and Signal1Y are the same length (1000 values). Signal1X is a different length than Signal2X (200 values).

These pairs of XY lists are passed to a function that creates multiple plots on a WPF xaml.

C#:
List<List<double>, List<double>>

does not work either.
 
Last edited:
C#:
listtupledSignals.Add(Tuple.Create(listdSignalX, listdSignalY));
 
The pairs of XY lists are the same length. Each pair of XY lists could be different lengths. Signal1X and Signal1Y are the same length (1000 values). Signal1X is a different length than Signal2X (200 values).
In general, parallel lists are bad. You should really keep data that belongs together together.

So instead of List<Tuple<List<double>,List<double>>>, even better would be List<List<Tuple<double,double>>> .

And this can be populated by:
C#:
var listOfLists = new List<List<Tuple<double, double>>>();
listOfLists.Add(listdSignal0X.Zip(listdSignal0Y, (x, y) => Tuple.Create(x, y)));
listOfLists.Add(listdSignal1X.Zip(listdSignal1Y, (x, y) => Tuple.Create(x, y)));
:
 
It works to create:

C#:
List<Point> listPointsTop = new List<Point>();
List<Point> listPointsMiddle = new List<Point>();
List<Point> listPointsBottom = new List<Point>();

then

C#:
CreateXYPoints(, ref listPointsTop);
CreateXYPoints(listdSignal1X, listdSignal1Y, ref listPointsMiddle);
CreateXYPoints(listdSignal2X, listdSignal2Y, ref listPointsBottom);
 
private void CreateXYPoints(List<double> listdSignalX, List<double> listdSignalY, ref List<Point> listPoints)
{
  int iNumOfPoints = listdSignalX.Count;
  for (int ii = 0; ii < iNumOfPoints; ii++) {
    double dX = listdSignalX[ii];
    double dY = listdSignalY[ii];
    Point pt = new Point(dX, dY);
    listPoints.Add(pt);
  };
}//CreateXYPoints

Then use:

C#:
List<List<Point>> listlistpoxySignals = new List<List<Point>>();
listlistpoxySignals.Add(listPointsTop);
listlistpoxySignals.Add(listPointsMiddle);
listlistpoxySignals.Add(listPointsBottom);

listlistpoxySignals is passed to the plot xaml function
listlistpoxySignals[0] contains contents of listdSignal0X and listdSignal0Y listlistpoxySignals[1] contains contents of listdSignal1X and listdSignal1Y listlistpoxySignals[2] contains contents of listdSignal2X and listdSignal2Y.
 
Last edited:
Solution
C#:
private List<Point> CreateXYPoints(List<double> listdSignalX, List<double> listdSignalY)
    => listdSignalX.Zip(listdSignalY, (x,y) => new Point(x,y)).ToList();
 
Back
Top Bottom