如何使用本地列表作为函数的输入参数
How to use local list as an input parameter for function
我正在为学校做一个项目,花了很长时间才开始工作。
程序流程如下:
- 1) 使用 windows 形式将文本文件中的数据加载到数据网格中 https://imgur.com/uygDc3I
- 2) 使用另一种形式,select 数据网格中的变量到 return 该列的统计信息 https://imgur.com/ly9aWWc。
这是使用其结构进行所有统计的函数:
public struct DescriptiveStat
{
public double max, min, sum, avg, var, stddev;
public string range;
}
public static DescriptiveStat GetDescriptiveStat(List<double> data)
{
DescriptiveStat result = new DescriptiveStat();
double sum = 0, sqSum = 0, max = data[0], min = data[0];
foreach (double x in data)
{
sum += x;
sqSum += Math.Pow(x, 2);
if (x > max)
max = x;
if (x < min)
min = x;
}
int n = data.Count;
result.sum = sum;
result.max = max;
result.min = min;
result.avg = sum / n;
result.var = (sqSum - n * Math.Pow(result.avg, 2)) / n;
result.stddev = Math.Sqrt(result.var);
return result;
}
该功能是我老师设置的,不能更改。它必须采用 List<double> data
和 return 结果。
目前我有它,所以当我按下带有单个变量的 "DescriptiveStat" 形式的按钮 "Generate" 时,它会调用我的函数将数据加载到列表中以准备发送它到上面的 DescriptiveStat 函数。这是我的代码:
public void GetDescriptiveStat()
{
List<double> data = new List<double>();
double temp;
data.ToArray();
for(int i = 0; i < 94; i++)
{
temp = dblValues[i][0];
data.Add(temp);
}
data.ToList();
//data.ForEach(Console.WriteLine);
}
我知道它正在将数据正确读取到列表中,但我在使用此本地列表作为函数 DescriptiveStat GetDescriptiveStat(List<double>data)
的参数时遇到问题 - 当我尝试插入类似 double result = Mathtool.GetDescriptiveStat(data);
的内容时它给了我错误:
- 无法将类型 'MultivariateStatistics.Mathtool.DescriptiveStat' 隐式转换为 'double'
任何人都可以帮助我做错什么,或者我如何使用列表作为函数的参数?
谢谢。
首先,您不必将列表转换为数组 (data.ToArray()
),然后再转换回列表 (data.ToList()
)。其次,而不是 void
让你的函数 return List<double>
如下所示:
public List<double> GetDescriptiveStat()
{
List<double> data = new List<double>();
for (int i = 0; i < 94; i++)
{
data.Add(dblValues[i][0]);
}
return data;
}
现在因为你的函数 GetDescriptiveStat()
return 是一个列表你可以将它作为输入参数发送到教师函数 GetDescriptiveStat(List<double> data)
:
DescriptiveStat myData = GetDescriptiveStat(GetDescriptiveStat());
也许有更好的方法来做到这一点,但您明确表示不能更改教师功能。
我正在为学校做一个项目,花了很长时间才开始工作。
程序流程如下:
- 1) 使用 windows 形式将文本文件中的数据加载到数据网格中 https://imgur.com/uygDc3I
- 2) 使用另一种形式,select 数据网格中的变量到 return 该列的统计信息 https://imgur.com/ly9aWWc。
这是使用其结构进行所有统计的函数:
public struct DescriptiveStat
{
public double max, min, sum, avg, var, stddev;
public string range;
}
public static DescriptiveStat GetDescriptiveStat(List<double> data)
{
DescriptiveStat result = new DescriptiveStat();
double sum = 0, sqSum = 0, max = data[0], min = data[0];
foreach (double x in data)
{
sum += x;
sqSum += Math.Pow(x, 2);
if (x > max)
max = x;
if (x < min)
min = x;
}
int n = data.Count;
result.sum = sum;
result.max = max;
result.min = min;
result.avg = sum / n;
result.var = (sqSum - n * Math.Pow(result.avg, 2)) / n;
result.stddev = Math.Sqrt(result.var);
return result;
}
该功能是我老师设置的,不能更改。它必须采用 List<double> data
和 return 结果。
目前我有它,所以当我按下带有单个变量的 "DescriptiveStat" 形式的按钮 "Generate" 时,它会调用我的函数将数据加载到列表中以准备发送它到上面的 DescriptiveStat 函数。这是我的代码:
public void GetDescriptiveStat()
{
List<double> data = new List<double>();
double temp;
data.ToArray();
for(int i = 0; i < 94; i++)
{
temp = dblValues[i][0];
data.Add(temp);
}
data.ToList();
//data.ForEach(Console.WriteLine);
}
我知道它正在将数据正确读取到列表中,但我在使用此本地列表作为函数 DescriptiveStat GetDescriptiveStat(List<double>data)
的参数时遇到问题 - 当我尝试插入类似 double result = Mathtool.GetDescriptiveStat(data);
的内容时它给了我错误:
- 无法将类型 'MultivariateStatistics.Mathtool.DescriptiveStat' 隐式转换为 'double'
任何人都可以帮助我做错什么,或者我如何使用列表作为函数的参数?
谢谢。
首先,您不必将列表转换为数组 (data.ToArray()
),然后再转换回列表 (data.ToList()
)。其次,而不是 void
让你的函数 return List<double>
如下所示:
public List<double> GetDescriptiveStat()
{
List<double> data = new List<double>();
for (int i = 0; i < 94; i++)
{
data.Add(dblValues[i][0]);
}
return data;
}
现在因为你的函数 GetDescriptiveStat()
return 是一个列表你可以将它作为输入参数发送到教师函数 GetDescriptiveStat(List<double> data)
:
DescriptiveStat myData = GetDescriptiveStat(GetDescriptiveStat());
也许有更好的方法来做到这一点,但您明确表示不能更改教师功能。