第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

如何計(jì)算不同 datagridview 中的行值?

如何計(jì)算不同 datagridview 中的行值?

C#
夢(mèng)里花落0921 2023-07-22 18:41:26
我在兩個(gè)不同的數(shù)據(jù)網(wǎng)格中有兩個(gè)數(shù)據(jù),我想從行中獲取值,以便我依靠歐氏距離公式。我可以獲取第二個(gè) datagridview 中的值,但無(wú)法獲取第一個(gè) datagridview 中的數(shù)據(jù)。我試圖寫 foreach,但我仍然在那里foreach (DataGridViewRow row1 in dataGridView1.Rows){? ? foreach (DataGridViewRow row in dataGridView2.Rows)? ? {? ? ? ? double NilaiPixelGrid1 = Convert.ToDouble(row1.Cells[2].Value.ToString());? ? ? ? double NilaiRedGrid1 = Convert.ToDouble(row1.Cells[3].Value.ToString());? ? ? ? double NilaiGreenGrid1 = Convert.ToDouble(row1.Cells[4].Value.ToString());? ? ? ? double NilaiBlueGrid1 = Convert.ToDouble(row1.Cells[5].Value.ToString());? ? ? ? double NilaiPixel = Convert.ToDouble(row.Cells[2].Value.ToString());? ? ? ? double NilaiRed = Convert.ToDouble(row.Cells[3].Value.ToString());? ? ? ? double NilaiGreen = Convert.ToDouble(row.Cells[4].Value.ToString());? ? ? ? double NilaiBlue = Convert.ToDouble(row.Cells[5].Value.ToString());? ? ? ? double dist = Math.Pow((NilaiPixelGrid1 - NilaiPixel), 2) +? ? ? ? ? ? ? ? ? ? Math.Pow((NilaiRedGrid1 - NilaiRed), 2) +? ? ? ? ? ? ? ? ? ? Math.Pow((NilaiGreenGrid1 - NilaiGreen), 2) +? ? ? ? ? ? ? ? ? ? Math.Pow((NilaiBlueGrid1 - NilaiBlue), 2);? ? }}System.NullReferenceException:“未將對(duì)象引用設(shè)置為對(duì)象的實(shí)例。”
查看完整描述

2 回答

?
鳳凰求蠱

TA貢獻(xiàn)1825條經(jīng)驗(yàn) 獲得超4個(gè)贊

安全運(yùn)行以避免null異常


  public double ConvertToDouble(Object obj) {

     double convertedValue = 0;

     if(obj == null) return convertedValue ; 

     Double.TryParse(obj.ToString(), out convertedValue);

     return convertedValue;

  }


  foreach (DataGridViewRow outerRow in dataGridView1.Rows) {  

                    String distValue = "";

                    double NilaiPixelGrid1 = ConvertToDouble(outerRow.Cells[2].Value);

                    double NilaiRedGrid1 = ConvertToDouble(outerRow.Cells[3].Value);

                    double NilaiGreenGrid1 = ConvertToDouble(outerRow.Cells[4].Value);

                    double NilaiBlueGrid1 = ConvertToDouble(outerRow.Cells[5].Value);

 //inner loop

   foreach (DataGridViewRow innerRow in dataGridView2.Rows) { 

                    double NilaiPixel = ConvertToDouble(innerRow.Cells[2].Value);

                    double NilaiRed = ConvertToDouble(innerRow.Cells[3].Value);

                    double NilaiGreen = ConvertToDouble(innerRow.Cells[4].Value);

                    double NilaiBlue = ConvertToDouble(innerRow.Cells[5].Value);



                    double dist = Math.Pow((NilaiPixelGrid1 - NilaiPixel), 2) +

                    Math.Pow((NilaiRedGrid1 - NilaiRed), 2) +

                    Math.Pow((NilaiGreenGrid1 - NilaiGreen), 2) +

                    Math.Pow((NilaiBlueGrid1 - NilaiBlue), 2);


               //use dist value

               distValue += " " + dist;

  }

   Console.WriteLine(distValue);

 }


查看完整回答
反對(duì) 回復(fù) 2023-07-22
?
回首憶惘然

TA貢獻(xiàn)1847條經(jīng)驗(yàn) 獲得超11個(gè)贊

如果您沒(méi)有注意到,那么行計(jì)數(shù)從 0 開(kāi)始,而不是從 1 開(kāi)始。


如何計(jì)算歐氏距離的示例


public static double EuclideanDistance(Tuple<double, double> first, Tuple<double, double> second)

{

  var difItem1 = first.Item1 - second.Item1;

  var difItem2 = first.Item2 - second.Item2;

  return Math.Sqrt(difItem1 * difItem1 + difItem2 * difItem2);

}

如果您有更多維度,那么您可以創(chuàng)建過(guò)載。


public static double EuclideanDistance(Tuple<double, double, double, double> first, Tuple<double, double, double, double> second)

{

    var difItem1 = first.Item1 - second.Item1;

    var difItem2 = first.Item2 - second.Item2;

    var difItem3 = first.Item3 - second.Item3;

    var difItem4 = first.Item4 - second.Item4;

    return Math.Sqrt(difItem1 * difItem1 + difItem2 * difItem2 + difItem3 * difItem3 + difItem4 * difItem4);

}

所以我可以創(chuàng)建一個(gè)數(shù)據(jù)集:


DataTable table1 = new DataTable("From");

table1.Columns.Add("a", typeof(double));

table1.Columns.Add("r", typeof(double));

table1.Columns.Add("g", typeof(double));

table1.Columns.Add("b", typeof(double));

table1.Rows.Add(255, 23, 234, 55);

table1.Rows.Add(255, 26, 234, 55);


DataTable table2 = new DataTable("To");

table2.Columns.Add("a", typeof(double));

table2.Columns.Add("r", typeof(double));

table2.Columns.Add("g", typeof(double));

table2.Columns.Add("b", typeof(double));

table2.Rows.Add(255, 23, 231, 7);

table2.Rows.Add(255, 27, 231, 7);


DataSet set = new DataSet("Distance");

set.Tables.Add(table1);

set.Tables.Add(table2);

然后循環(huán)這些值并計(jì)算距離并將其打印出來(lái)


var results = new List<double>();

for (int i = 0; i < Math.Min(set.Tables["From"].Rows.Count, set.Tables["To"].Rows.Count); i++)

{

    var from = Tuple.Create(

        (double)set.Tables["From"].Rows[i]["a"], (double)set.Tables["From"].Rows[i]["r"],

        (double)set.Tables["From"].Rows[i]["g"], (double)set.Tables["From"].Rows[i]["b"]);

    var to = Tuple.Create(

        (double)set.Tables["To"].Rows[i]["a"], (double)set.Tables["To"].Rows[i]["r"],

        (double)set.Tables["To"].Rows[i]["g"], (double)set.Tables["To"].Rows[i]["b"]);

    results.Add(EuclideanDistance(from, to));

}


Console.WriteLine("Results are: " + string.Join(", ", results));

在你的情況下,你還可以設(shè)置


DataGridView1.DataSource = set;

DataGridView1.DataMember = "From";

DataGridView2.DataSource = set;

DataGridView2.DataMember = "To";


查看完整回答
反對(duì) 回復(fù) 2023-07-22
  • 2 回答
  • 0 關(guān)注
  • 173 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)