比较2个分裂字符串的结果?

时间:2014-05-20 19:32:00

标签: c# string split string-comparison

我有两个字符串输入,它们已被拆分,因此每个项目都可以与另一个项目区分(这些项目是产品属性,如长度,重量,光洁度,污点颜色等)。一个字符串具有产品的原始值,而另一个字符串具有新值(无论它们是什么 - 用户可以编辑他们想要的任何产品值)。

现在,我有分裂字符串产生我想要的信息,但我不确定如何将结果相互比较,因为各个产品值都在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 个答案:

答案 0 :(得分:3)

将所有字符串拆分并存储在数组(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();

我希望这会有所帮助

答案 1 :(得分:1)

什么是&#34;变更&#34;?加成?删除?修改

如果只是加法,奥斯卡的方法有效。这是相同的(设置差异),但更简洁:

var changedResults = newItems.Except(oldItems)

但是,如果删除是&#34;更改&#34;同样,你需要从双方都考虑它。

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

由于集合只是字符串,因此没有修改的概念。