сравнить два значения массива строк в C# - PullRequest
0 голосов
/ 28 апреля 2020

У меня есть два строковых массива:

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

Я просто хочу сравнить

"5" из array1 с "1" из array2

затем "4" из массива от 1 до "2" из array2

затем "2" из массива от 1 до "3" из array2

и выполните некоторые вычисления в их foreach состоянии

вот мой код:

  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(',');
          }
    } 
}

Поправьте меня, если я ошибаюсь .. Заранее спасибо!

Ответы [ 4 ]

2 голосов
/ 28 апреля 2020

Ваш цикл неправильный. Для каждого элемента в array1 вы обрабатываете каждый элемент в array2. Предполагая, что оба массива имеют одинаковую длину, вы хотите что-то вроде этого:

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
}
1 голос
/ 28 апреля 2020

Попробуйте for l oop вместо 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(',');
    }
}

Или (то же самое)

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(',');
    }
}

Я надеюсь, что вычисляемая часть вашего кода правильный.

0 голосов
/ 28 апреля 2020

Использование one for l oop вместо: (при условии, что array1 и array2 имеют одинаковую длину)

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
    {
        // ...
    }
}

Ваш код сравнил каждый элемент array1 с каждым элементом в array2 , Это потому, что вы использовали два вложенных цикла.

0 голосов
/ 28 апреля 2020

Вы не должны делать два разных цикла, потому что таким образом вы сравниваете каждый объект в массиве 1 с каждым объектом в массиве 2

Вместо этого вы можете использовать индекс и выполнять итерацию обоих массивов одновременно. Попробуйте это здесь: 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}");
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...