我很抱歉这可能是编程101,但我的经验有限,因为编程不是我的日常活动。我还道歉,如果之前已经回答了一百万次,但我在搜索中找不到它是不成功的,因为我不确定这会被考虑(字典?对象?列表?)
我想创建一个有序的双打列表,它对应于我感兴趣的特定属性,如下所示:
[(a1,a2,a3,...),(b1,b2,b3,...),(c1,c2,c3,...),...]
我的程序将计算输入(a_input),该输入很可能位于值列表之间,例如:
a3< a_input< A4
然后我会喜欢程序识别它位于a3和a4之间并使用此信息对其他值进行线性插值,例如:
(a_input - a3)/(a4 - a3)=(c_input - c3)/(c4-c3)
这将输出我感兴趣的值(例如c_input)来运行我的程序的其余部分。
我究竟会如何实现这一目标?我考虑过字典方法,但我不想要键字符串,因为所有值都可以很容易地被排序。
非常感谢任何查找信息的输入或指示。
答案 0 :(得分:0)
你错了
创建一个属性类 按照temp的顺序添加它们,或者你可以对foreach进行排序
class PhysicalProperties
{
public double Temp { get; set; }
public double Vis { get; set; }
public double Dens { get; set; }
}
List<PhysicalProperties> ListPhysicalProperties = new List<PhysicalProperties>();
// add the PhysicalProperties in temp order
PhysicalProperties fpUnder;
PhysicalProperties fpOver;
foreach(PhysicalProperties fp in ListPhysicalProperties)
{
if(f.Temp >= temp)
{
fpOver = fp;
break:
}
fpUnder = fp;
}
// do the liner interpolation on fpUnder and fpOver
// check for possible null
还有LINQ但是因为你必须得到先验我认为循环是要走的路 我怀疑你将有超过1000个临时工
P.S。我有化学工程学士学位 漂浮可能足够大
答案 1 :(得分:-1)
我确信有更多有效/简单的方法可以实现这一点,但下面的代码片段是我如何查找和插入rho的值。我收到的输出是Rho = 1.1855,这是预期的。我将能够使用它来使用此方法插入其他值。感谢大家看看我的问题,如果有人有任何简化代码的建议,请告诉我。
//Dictionaries for the different air properties
//Air properties for T=0
Dictionary<string, double> a = new Dictionary<string, double>();
{
a.Add("T",0);
a.Add("Rho", 1.293);
a.Add("Cp", 1.005);
a.Add("k", 0.0243);
a.Add("Nu", 13.30*Math.Pow(10,-6));
a.Add("Betta", 3.67 * Math.Pow(10, -3));
a.Add("Pr", 0.715);
}
//Air properties for T=20
Dictionary<string, double> b = new Dictionary<string, double>();
{
b.Add("T", 20);
b.Add("Rho", 1.205);
b.Add("Cp", 1.005);
b.Add("k", 0.0257);
b.Add("Nu", 15.11 * Math.Pow(10, -6));
b.Add("Betta", 3.43 * Math.Pow(10, -3));
b.Add("Pr", 0.713);
}
//Air properties for T=40
Dictionary<string, double> c = new Dictionary<string, double>();
{
c.Add("T", 40);
c.Add("Rho", 1.127);
c.Add("Cp", 1.005);
c.Add("k", 0.0271);
c.Add("Nu", 16.97 * Math.Pow(10, -6));
c.Add("Betta", 3.20 * Math.Pow(10, -3));
c.Add("Pr", 0.711);
}
//temporary values for example
double T = 25;
double Rho=0;
// Code for property lookup
if (T <= a["T"])
{
Rho = a["Rho"];
}
else if (T == b["T"])
{
Rho = b["Rho"];
}
else if (T < c["T"])
{
Rho = (T - b["T"]) * (c["Rho"] - b["Rho"]) / (c["T"] - b["T"]) + b["Rho"];
}
else
Rho = c["Rho"];