2012-08-28 61 views
0

嗨,我有兩個字符串建設者s1和s2。我正在使用逗號分隔符將命令分配給該字符串生成器。我想比較兩個字符串構建器。我想知道s1中的所有命令也都在s2中。如果不是,我想知道在s2中缺少哪個訂單。如何實現這一目標?比較兩個stringbuilders usng C#

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

回答

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 
+0

這樣做肯定會節省將字符串分割爲「','」的無意義步驟,並啓用一些很好的設置樣式linq。 – Jodrell

+1

@Jodrell:的確 - 這也意味着保持對邏輯類型的操作。多餘的字符串轉換是編程的難題:) –

+0

如何向該hashset添加多個訂單? – Philly

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類的,而不是string秒。