3

リストのリストがあり、列指向の値を追加したい。次のコード サンプルのように:

Data = new List<List<double>>();
for (int i = 0; i < columnCount; i++)
        {
            for (int j = 0; j < rowCount; j++)
            {
                Data[j][i] = (probabilityList[j]) * K); // It won't work
            }
        }

現在の状況ではデータのインデックスが存在しないため、機能しないことがわかっており、add() メソッドを使用する必要があります。

ただし、列で始まるリストに値を追加する必要があります。

[1   , null] ----> [1, null]
[null, null]       [2, null]

列で始まるリストのリストに値を追加するにはどうすればよいですか?

4

5 に答える 5

2

リストの外側のリスト内に配置する実際のリストを作成する必要があります。

for (int i = 0; i < rowCount; i++)
{
    Data.Add(new List<double>());
}

すべての内部リストを作成したら、それらを調べて値を追加できます。

for (int i = 0; i < columnCount; i++)
{
    for (int j = 0; j < rowCount; j++)
    {
        Data[j].Add((probabilityList[j]) * K);
    }
}
于 2013-01-04T22:19:04.393 に答える
1

newリストのリストの各要素をアップする必要があります

Data = new List<List<double>>();
for (int i = 0; i < columnCount; i++)
{
  List<double> column = new List<double>();
  for (int j = 0; j < rowCount; j++)
  {
    //not really sure if this is the correct code here
    //that would depend on your logic
    column.Add((probabilityList[j]) * K); 
  }
  Data.Add(column);
}

リストは配列ではありません。要素を入れるだけのスロットはなく、チェーンのようなものです。

したがって、最初List<List<double>>は空の があり、そのList<double>中にインスタンスはありません。これらのリストを(明示的に)作成してリストに追加する必要がありDataます。

あるいは、要素用のスロットを持つ行と列が必要な場合は、次のように 2 次元行列を使用できます。

var matrixData = new double[rowCount, columnCount];
for (int i = 0; i < columnCount; i++)
{
  for (int j = 0; j < rowCount; j++)
  {
    matrixData[j, i] = ((probabilityList[j]) * K); 
  }
}
于 2013-01-04T22:01:25.890 に答える
1

必要な列と行の数がわかっているので、リストの代わりに配列を使用することを考えるかもしれません。配列が初期化されると、配列のすべてのメンバーがデフォルト値に初期化されます。これにより、コードが作成されます

double[,] Data = new double[columnCount,rowCount];
for (int i = 0; i < columnCount - 1; i++)
    {
        for (int j = 0; j < rowCount - 1; j++)
        {
            Data[j,i] = (probabilityList[j]) * K); 
        }
    }
于 2013-01-04T22:17:55.590 に答える
0

つまり、親コレクション内の各コレクションを初期化する必要があります 。List<T>List<T>

ご存知かもしれませんが、コレクションの初期化はnew.NET Framework の throw キーワードで行われます。そうしないと、すべての内部リストが表示さNullれ、それらにアクセスできなくなります。

この概念をコードに適用しました。

var mainData = new List<List<double>>();
for (int i = 0; i < columnCount; i++)
{
  var innerList = new List<double>();
  for (int j = 0; j < rowCount; j++)
  {
    innerList.Add((probabilityList[j]) * K); 
  }
  mainData.Add(innerList);
}
于 2013-01-04T22:03:02.630 に答える