Проблема в списке <double [,]> - PullRequest
4 голосов
/ 27 апреля 2010

Что не так с этим (в C # 3.0):

List<double> x = new List<double> { 0.0330, -0.6463, 0.1226, -0.3304, 0.4764, -0.4159, 0.4209, -0.4070, -0.2090, -0.2718, -0.2240, -0.1275, -0.0810, 0.0349, -0.5067, 0.0094, -0.4404, -0.1212 };
List<double> y = new List<double> { 0.4807, -3.7070, -4.5582, -11.2126, -0.7733, 3.7269, 2.7672, 8.3333, 4.7023,0,0,0,0,0,0,0,0,0 };

List<double[,]> z = new List<double[,]>{x,y}; // this line

Произошла ошибка:

Error: Argument '1': cannot convert from 'System.Collections.Generic.List<double>' to 'double[*,*]' 

Требуется помощь.

Ответы [ 5 ]

1 голос
/ 27 апреля 2010
var z = new List<List<double>> { x, y };

Однако, если вы хотите сохранить два списка в двумерном массиве ([,]) , это ваш ответ . Вам придется конвертировать его вручную, как показано там:

public static T[,] To2dArray(this List<List<T>> list)
{
    if (list.Count == 0 || list[0].Count == 0)
        throw new ArgumentException("The list must have non-zero dimensions.");

    var result = new T[list.Count, list[0].Count];
    for(int i = 0; i < list.Count; i++)
    {
        for(int j = 0; j < list.Count; j++)
        {
            if (list[i].Count != list[0].Count)
                throw new InvalidOperationException("The list cannot contain elements (lists) of different sizes.");
            result[i, j] = list[i][j];
        }
    }

    return result;
}
0 голосов
/ 27 апреля 2010

Не должно ли быть:

List<List<double>,List<double>> z = new List<List<double>, List<double>>{x,y};

Но я не думаю, что это действительно то, что вы после этого?

0 голосов
/ 27 апреля 2010

Вы после чего-то вроде этого?

        List<double> x = new List<double> { 0.0330, -0.6463, 0.1226, -0.3304, 0.4764, -0.4159, 0.4209, -0.4070, -0.2090, -0.2718, -0.2240, -0.1275, -0.0810, 0.0349, -0.5067, 0.0094, -0.4404, -0.1212 };
        List<double> y = new List<double> { 0.4807, -3.7070, -4.5582, -11.2126, -0.7733, 3.7269, 2.7672, 8.3333, 4.7023, 0, 0, 0, 0, 0, 0, 0, 0, 0 };

        List<double[]> z = x.Select((x1, index) => new double[2] {x1, y[index]} ).ToList();

РЕДАКТИРОВАТЬ: изменил мой ответ, чтобы правильно присоединиться к спискам в индексе, а не искать его.

0 голосов
/ 27 апреля 2010

Инициализатор коллекции для List<double[,]> ожидает элементы типа double[,] (это двумерный массив, похожий на матрицу), но вы передаете его x и y, которые имеют тип List<double>, что означает, что он пытается добавить два списка двойников в качестве элементов нового списка.

Если вы пытаетесь добавить координаты в список, то вам нужна какая-то структура, чтобы содержать их. Вы можете написать свой собственный или использовать System.Drawing.PointF.

0 голосов
/ 27 апреля 2010

double[,] определяет многомерный массив, но вы указываете два списка.

Из вашей инициализации выглядит, что вы ищете что-то вроде

List<PointF> list = new List<PointF> { new PointF (0.0330F, 0.4807F), new PointF (-0.6463F, -3.7070F) };
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...