コード例 #1
0
ファイル: Hopkins.cs プロジェクト: AlexDeusdete/TCC_KM
        /// <summary>
        /// faz o calculo da distancia minima dos registros de table
        /// para a minha base de dados original
        /// </summary>
        /// <param name="table"></param>
        private void CalculoMin(DataTable table)
        {
            double distancia     = -1;
            int    indexOriginal = -1;

            foreach (DataRow dr in table.Rows)
            {
                List <double> listY = dr.ItemArray.Select(x => Convert.ToDouble(x)).Take(Dados.Columns.Count).ToList();
                if (dr.Table.Columns.Contains("indexOriginal"))
                {
                    /*se tiver "indexOriginal" gravo esse
                     * valor para evitar calcular a distancia dele para ele mesmo*/
                    indexOriginal = Convert.ToInt32(dr["indexOriginal"]);
                }

                for (int i = 0; i < Dados.Rows.Count; i++)
                {
                    if (dr.Table.Columns.Contains("indexOriginal"))
                    {
                        if (i == indexOriginal)
                        {
                            continue;
                        }
                    }

                    List <double> listX = Dados.Rows[i].ItemArray.Select(x => Convert.ToDouble(x)).Take(Dados.Columns.Count).ToList();
                    distancia = Formulas.Distancia(listX, listY);

                    //i == 0 significa que estou na primeira execução e a distancia ainda está em branco.
                    //i == 1 e index original ==0 significa que estou na primeira execução pois se o index original. == 0 ele pula a primeira execução
                    if ((i == 0 || (i == 1 && indexOriginal == 0)) ||
                        Convert.ToDouble(dr["DistanciaMin"]) > distancia)
                    {
                        dr["DistanciaMin"] = distancia;
                    }
                }
            }
        }