添加脚本以查找最小值到循环 C#

本文关键字:循环 最小值 查找 脚本 添加 | 更新日期: 2023-09-27 17:55:48

我正在添加到我的 for 循环中,以查找我从解析文本文件中获得的数组中的最小值和最大值。找到最大值很容易,但是对于最小值,我得到的值为零,它应该是 1。这是我用于循环的内容- (到目前为止,我只是在测试以获得 temp.x 的最小值)

       for (int i = 0; i < lineCount; i++) {
        string line = dataLines [i];
        lineValues = line.Split (' ');
        Vector4 temp = new Vector4 ();
        Vector3 center = new Vector3 ();
        temp.x = float.Parse (lineValues [0]);
        maxvalueX = float.MinValue;
        minvalueX = float.MaxValue;
        if (temp.x > maxvalueX) { maxvalueX = temp.x; } 
        if (temp.x < minvalueX) { minvalueX = temp.x; }
        temp.y = float.Parse (lineValues [1]);
            if (temp.y > maxvalueY) { maxvalueY = temp.y; }
        temp.z = float.Parse (lineValues [2]);
            if (temp.z > maxvalueZ) { maxvalueZ = temp.z; }
        temp.w = float.Parse (lineValues [3]);
        data.myData [i].Set (scaleFactor*temp.x, scaleFactor*temp.y, scaleFactor*temp.z, temp.w);
        data.myData [i].Set (scaleFactor*temp.x, scaleFactor*temp.y, scaleFactor*temp.z, temp.w);
        //int value = data.myData [i].x;
        center.x = ((maxvalueX-1)/2);
        center.y = ((maxvalueY-1)/2);
        center.z = ((maxvalueZ-1)/2);
        data.dataCenter.Set (scaleFactor*center.x, scaleFactor*center.y, scaleFactor*center.z);
    }

任何关于这里出现问题的想法将不胜感激!谢谢!珍

添加脚本以查找最小值到循环 C#

找到最小值的最简单方法是执行与最大值相反的操作,即

if (temp.x > maxvalueX) { maxvalueX = temp.x; } 
if (temp.x < minvalueX) { minvalueX = temp.x; } 

请注意,如果最小值可能高于 0 或最大值低于 0,将最大值和最小默认值设置为 0 将给您带来问题。在循环之前,您应该像这样设置它们:

float maxvalueX = float.MinValue;
float minvalueX = float.MaxValue;

这样,您可以确保无论遇到什么值,数字都会被重置。确保你处理它们没有要考虑的值的情况。


更新:

我已经包含了您的代码的完整更新版本,并带有注释来演示我的意思:

// These should be before the loop just to avoid resetting the max/min values
float maxvalueX = float.MinValue;
float minvalueX = float.MaxValue;
  for (int i = 0; i < lineCount; i++) {
    string line = dataLines [i];
    lineValues = line.Split (' ');
    Vector4 temp = new Vector4 ();
    Vector3 center = new Vector3 ();
    temp.x = float.Parse (lineValues [0]);
    if (temp.x > maxvalueX) { maxvalueX = temp.x; } 
    if (temp.x < minvalueX) { minvalueX = temp.x; }
    temp.y = float.Parse (lineValues [1]);
        if (temp.y > maxvalueY) { maxvalueY = temp.y; }
    temp.z = float.Parse (lineValues [2]);
        if (temp.z > maxvalueZ) { maxvalueZ = temp.z; }
    temp.w = float.Parse (lineValues [3]);
    data.myData [i].Set (scaleFactor*temp.x, scaleFactor*temp.y, scaleFactor*temp.z, temp.w);
    data.myData [i].Set (scaleFactor*temp.x, scaleFactor*temp.y, scaleFactor*temp.z, temp.w);
    //int value = data.myData [i].x;
}
// I've moved these out of the loop as they only use the final max/min values
    center.x = ((maxvalueX-1)/2);
    center.y = ((maxvalueY-1)/2);
    center.z = ((maxvalueZ-1)/2);
    data.dataCenter.Set (scaleFactor*center.x, scaleFactor*center.y, scaleFactor*center.z);

试试这个

if (minvalueX  < temp.x) 
{
  valueX = temp.x;
  minvalueX = valueX;
}