0

嗨,我有两个字符串生成器 s1 和 s2。我正在使用逗号分隔符为该字符串生成器分配订单。我想比较两个字符串生成器。我想知道 s1 中的所有订单也在 s2 中。如果不是,我想知道 s2 中缺少哪个订单。如何做到这一点?

if (!IsPostBack)
{
    int reccount = dsResult.Tables[0].Rows.Count;
    for (int count = 0; count < reccount;count++)
    {
        HashSet<string> arrayOrdId = new HashSet<string>();
        arrayOrdId.Add(dsResult.Tables[0].Rows[count][1].ToString());
        // arrayOrdId[count] = dsResult.Tables[0].Rows[count][1].ToString();
    }
}
4

2 回答 2

7

我建议完全不要使用StringBuilder它 - 相反,创建两个List<string> 或可能HashSet<string>构建订单 ID,然后比较这些. 如果您出于其他原因需要创建字符串表示,请单独执行。(我假设您的订单 ID 是字符串。如果不是,请改用适当的集合类型。)

目前尚不清楚订单是否重要,但如果不重要,那HashSet<string>就是您应该使用的。您可以很容易地找到差异:

var missingFromX = y.Except(x);
var missingFromY = x.Except(y);
// Do whatever you want with those differences
于 2012-08-28T16:16:38.233 回答
1

类似的东西

var orders1 = new HashSet<string>();
var orders2 = new HashSet<string>();

// add the orders to the sets, not stringbuilders, here

var order1sInOrders2 = orders1.Intersect(orders2);
var order2sNotInOrders1 = orders2.Except(orders1);

您可能要考虑直接在IEnumerable某个自定义Order类的 s 上而不是strings 上执行此操作。

于 2012-08-28T16:23:55.567 回答