在Ruby on Rails 4

时间:2015-06-10 10:20:55

标签: ruby-on-rails ruby

我是Ruby新手,我正在研究一个项目并同时学习。 我过去使用Matlab和C编写代码。

对于Ruby中的这个项目,我在数组中保存变量,这对我来说很常见,但不知怎的,我认为这不是一个使用Ruby的好主意。

这就是我需要你帮助的原因。

您是否更好地了解如何编写以下for循环?我不想重复代码(我想使用DRY原则),我认为应该有更好的方法来缩短代码。

strombezugsvermeidung_kWh_a_eco4 = Array.new()
strombezugsvermeidung_kWh_a_eco6 = Array.new()
strombezugsvermeidung_kWh_a_eco8 = Array.new()
strombezugsvermeidung_kWh_a_eco10 = Array.new()
strombezugsvermeidung_kWh_a_eco12 = Array.new()
strombezugsvermeidung_kWh_a_eco14 = Array.new()
strombezugsvermeidung_kWh_a_eco16 = Array.new()


for i in 0..19
    strombezugsvermeidung_kWh_a_eco4[i] = (autarkie_eco4 / 100) * jahrstromverbrauch
    strombezugsvermeidung_kWh_a_eco6[i] = (autarkie_eco6 / 100) * jahrstromverbrauch
    strombezugsvermeidung_kWh_a_eco8[i] = (autarkie_eco8 / 100) * jahrstromverbrauch
    strombezugsvermeidung_kWh_a_eco10[i] = (autarkie_eco10 / 100) * jahrstromverbrauch
    strombezugsvermeidung_kWh_a_eco12[i] = (autarkie_eco12 / 100) * jahrstromverbrauch
    strombezugsvermeidung_kWh_a_eco14[i] = (autarkie_eco14 / 100) * jahrstromverbrauch
    strombezugsvermeidung_kWh_a_eco16[i] = (autarkie_eco16 / 100) * jahrstromverbrauch
end

提前谢谢。

1 个答案:

答案 0 :(得分:3)

我认为你最好像这样持有数据:

UPDATE

然后,您的代码将具有类似

的内容
            count = dgvStatus.Rows.Count;
            for (int i = 0; i < count; i++)
            {
                string Name = dgvStatus.Rows[i].Cells[0].Text;
                string IP = dgvStatus.Rows[i].Cells[1].Text;
                try
                {
                    Ping ping = new Ping();
                    PingReply reply = ping.Send(IP, 5000);

                    if (reply.Status == IPStatus.Success)
                    {
                        result = "UP";
                        Label status = (Label)dgvStatus.Rows[i].FindControl("lblstatus");
                        status.Text = result;
                        Panel panel = (Panel)dgvStatus.Rows[i].FindControl("Panel1");
                        panel.BackColor = Color.Green;
                    }
                    else
                    {
                        result = "DOWN";
                        Label status = (Label)dgvStatus.Rows[i].FindControl("lblstatus");
                        status.Text = result;
                        Panel panel = (Panel)dgvStatus.Rows[i].FindControl("Panel1");
                        panel.BackColor = Color.Red;
                    }
                }
                catch (PingException)
                {
                    result = "UNREACHABLE";
                    Label status = (Label)dgvStatus.Rows[i].FindControl("lblstatus");
                    status.Text = result;
                    Panel panel = (Panel)dgvStatus.Rows[i].FindControl("Panel1");
                    panel.BackColor = Color.Red;
                }`

而不是

strombezugsvermeidung_kWh_a_eco = {
  4 => {
    1 => <val a>,
    2 => <val b>,
    etc
  6 => {
    1 => <val c>,
    2 => <val d>,
    etc
  },
  etc
}

这样你就有一个变量来保存数据,而不是名字中带有数字的变量加载,这通常是一个坏主意。

你可以这样做:

strombezugsvermeidung_kWh_a_eco[8][3]

我不知道您的代码库,只是猜测,但您可能希望通过类似

之类的内容进一步将数据从变量名称转移到变量值中
strombezugsvermeidung_kWh_a_eco8[3]