0

辞書templist.clear()に追加したリストをメソッドがクリアする理由を知りたいです。ManhattanDistance

これは、私が取り組んできたデータ マイニング プロジェクトの一部です。k 最近傍アプローチを使用して欠損値を代入する必要があります。

public void CalculateManhattanDistance(Dictionary<int, List<string>> MissingList, Dictionary<int, List<string>> OtherList)
{
    Dictionary<int,Array> MissingListNeighbours = new Dictionary<int,Array>();
    Dictionary<int, List<int>> ManhattanDistanceList = new Dictionary<int,List<int>>();
    List<int> tempList = new List<int>();

    int total=0;
    int k=0;

    try
    {
        for (int i = 0; i < MissingList.Count(); i++)
        {
            for (int j = 0; j < OtherList.Count(); j++)
            {
                for (k = 0; k < MissingList[0].ToArray().Length; k++)
                {
                    if (Convert.ToChar(MissingList[i][k].ToString()) == '?')
                        continue;
                    else
                        total += Math.Abs(Convert.ToInt32(MissingList[i][k].ToString()) - Convert.ToInt32(OtherList[j][k].ToString()));
                }
                tempList.Add(total);

                total = 0;
            }
            ManhattanDistanceList.Add(i, tempList);

            tempList.Clear();
        }
    }
    catch (Exception ex)
    {
          ex.Message.ToString();
    }
}
4

2 に答える 2

6

ManhattanDistanceList.Add(i, tempList);が指しているのと同じリストへの参照を追加するためtempList、後でリストをクリアするtempListと、指しているリストManhattanDistanceList[i]もクリアされます。

ManhattanDistanceList.Add(i, tempList.ToList());リストのコピーを追加するには、 に変更します。

于 2013-04-26T11:58:22.263 に答える