Сравнить результаты двух разделенных строк?

У меня есть два строковых ввода, которые были разделены, поэтому каждый элемент отличается от другого (это такие параметры продукта, как длина, вес, отделка, цвет пятна и т. Д.). Одна строка имеет исходные значения для продукта, а другая - новые значения (какими бы они ни были - пользователи могут редактировать любые значения продукта, которые они хотят).

Прямо сейчас у меня есть разделенные строки, производящие нужную мне информацию, но я не уверен, как сравнить результаты друг с другом, так как отдельные значения продукта находятся внутри циклов foreach.

Вот что у меня есть:

 //checks to see which attributes have been changed/edited for the product
protected bool ifAttrChanged(string oldItm, string newItm)
{
    bool retVal = false;
    //get the original attributes of the product
    string[] oldItms = oldItm.Split(',');
    foreach (string oItm in oldItms)
    {
        if (oItm != "")
        {
            string[] oldThings = oItm.Split(',');
            string oldies = oldThings.GetValue(0).ToString();
        }
    }

    //get whatever new values have been entered for the product
    string[] newItms = newItm.Split(',');
    foreach (string nItm in newItms)
    {
        if (nItm != "")
        {
            string[] newThings = nItm.Split(',');
            string newbies = newThings.GetValue(0).ToString();
        }
    }
    if (newItms.ToString().Equals(oldItms.ToString(), StringComparison.Ordinal))
    {
        retVal = false;
        Label3.Text += retVal.ToString() + "<br />";
    }
    else
    {
        retVal = true;
        Label3.Text += retVal.ToString() + "<br />";
    }
     return retVal;
}

Я действительно хотел бы сравнить строковую переменную oldies с строковой переменной newbies (странные имена, но я не беспокоюсь об этом), но каждый из них в своем собственном выражении foreach, и я не могу получить к ним доступ в другом месте. Как можно успешно сравнить старые и новые значения двух разделенных строк, чтобы я мог узнать, какие значения были изменены, а какие остались прежними?

2 ответа

Решение

При этом все строки разделяются и хранятся в массивах (oldItems и newItems) и с использованием System.Linq.

Попробуй это:

var changedResults = newItems.Where(x => !oldItems.Any(y => x == y));

При этом вы получите IEnumerable со всей строкой в ​​newItems, которая не появляется в массиве oldItems. Если вы хотите преобразовать это в список или что-то, добавьте это:

var changedResults = newItems.Where(x => !oldItems.Any(y => x == y)).ToList();

надеюсь, это поможет

Что такое "изменение"? Добавление? Удаление? Модификация?

Если только дополнение, метод Оскара работает. Это то же самое (установить разницу), но немного более кратко:

var changedResults = newItems.Except(oldItems)

Однако, если удаление также является "изменением", вам нужно будет рассмотреть его с обеих сторон.

var changedResults = newItems.Except(oldItems).Union(oldItems.Except(newItems));

Поскольку наборы состоят только из строк, понятие модификации отсутствует.

Другие вопросы по тегам