Tengo dos series de cadenas:

string[] array1 = {"5", "4", "2"};    
string[] array2 = {"1", "2", "3"};

Solo quiero comparar

"5" de array1 a "1" de array2

Luego "4" de array1 a "2" de array2

Luego "2" de array1 a "3" de array2

Y hacer algunos cálculos en su condición foreach

Aquí está mi código:

  foreach(var items in array1)
  {
      foreach (var ind in array2)
      {
          int a = (Convert.ToInt32(items) - Convert.ToInt32(ind));
          string b = Convert.ToString(a);
          string removeValue = b.Replace("-", String.Empty);
          if (Convert.ToInt32(items) > Convert.ToInt32(ind))
          {
              mp += Negative + ",";
              mpValue = mp.Split(',');
              np += a +",";
              nposition = np.Split(',');
          }
          else
          {
              mp += Positive + ",";
              mpValue = mp.Split(',');
              np += removeValue + ",";
              nposition = np.Split(',');
          }
    } 
}

Corrígeme si estoy equivocada .. Gracias de antemano!

c#
-1
KANWAL SHAHID 28 abr. 2020 a las 10:51

4 respuestas

La mejor respuesta

Tu bucle está mal. Para cada artículo en array1 está procesando cada artículo en array2. Suponiendo que ambas matrices tienen la misma longitud, desea algo como esto:

for(int i = 0; i < array1.Length; i++)
{
  var items = array1[i];
  var ind = array2[i];

  int a = (Convert.ToInt32(items) - Convert.ToInt32(ind));
  // Rest of code
}
2
Sean 28 abr. 2020 a las 08:02

No debe hacer dos bucles diferentes, porque de esa manera está comparando cada objeto en array1 con cada objeto en array2

En su lugar, puede usar el índice e iterar ambas matrices al mismo tiempo. Pruebe esto aquí: https://dotnetfiddle.net/XKd7zu

    string[] array1 = {"5", "4", "2"};
    string[] array2 = {"1", "2", "3"};

    for (int index = 0; index < array1.GetUpperBound(0); index++)
    {
        // In here I select the object from array 1 in position "index" that 
        // will be compared to the object of array2 in the same possition
        int valueArray1 = Int32.Parse(array1[index]);
        int valueArray2 = Int32.Parse(array2[index]);

        if (valueArray1 > valueArray2)
        {
            Console.WriteLine($"{valueArray1} is greater than {valueArray2}");
        }
        if (valueArray1 < valueArray2)
        {
            Console.WriteLine($"{valueArray2} is greater than {valueArray1}");
        }
        else
        {
            Console.WriteLine($"{valueArray2} is equal than {valueArray1}");
        }
    }
0
Carlos Garcia 28 abr. 2020 a las 08:01

Usando el bucle one for en su lugar: (asumiendo que array1 y array2 tienen la misma longitud)

for( int i = 0; i < array1.Length; i++ )
{
    int a = int.Parse(array1[i]);
    int b = int.Parse(array2[i]);

    // vv no string-operations needed to get an absolute value
    int diff = Math.Abs(a-b); // your "removeValue"

    if( a > b)
    {
        // ...
    }
    else
    {
        // ...
    }
}

Su código comparó cada elemento de array1 con cada elemento de array2. Eso es porque usaste dos bucles anidados.

0
Fildor 28 abr. 2020 a las 08:19

Pruebe el bucle for en lugar de foreach,

string[] array1 = { "5", "4", "2" };
string[] array2 = { "1", "2", "3" };

for (int i=0; i < array1.Length; i++)
{
    int a = (Convert.ToInt32(array1[i]) - Convert.ToInt32(array2[i]));
    string b = Convert.ToString(a);
    string removeValue = b.Replace("-", String.Empty);

    if (Convert.ToInt32(array1[i]) > Convert.ToInt32(array2[i]))
    {
        mp += Negative + ",";
        mpValue = mp.Split(',');
        np += a + ",";
        nposition = np.Split(',');
    }
    else
    {
        mp += Positive + ",";
        mpValue = mp.Split(',');
        np += removeValue + ",";
        nposition = np.Split(',');
    }
}

O (lo mismo)

string[] array1 = { "5", "4", "2" };
string[] array2 = { "1", "2", "3" };

for (int i=0; i<array1.Length; i++)
{
    int arr1Ele = Convert.ToInt32(array1[i]);
    int arr2Ele = Convert.ToInt32(array2[i]);

    int a = arr1Ele - arr2Ele;

    string b = Convert.ToString(a);
    string removeValue = b.Replace("-", String.Empty);

    if (arr1Ele > arr2Ele)
    {
        mp += Negative + ",";
        mpValue = mp.Split(',');
        np += a + ",";
        nposition = np.Split(',');
    }
    else
    {
        mp += Positive + ",";
        mpValue = mp.Split(',');
        np += removeValue + ",";
        nposition = np.Split(',');
    }
}

Espero que la parte de cálculo de su código sea correcta.

1
Avishka Dambawinna 28 abr. 2020 a las 08:21