2012-08-28 2 views
0

안녕하세요 두 문자열 빌더 s1 및 s2 있습니다. 쉼표 구분 기호를 사용하여 해당 stringbuilder에 주문을 할당하고 있습니다. 두 개의 문자열 빌더를 비교하고 싶습니다. 나는 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를 사용하지 않는 제안 - 대신 주문 ID를 구축하기 위해 두 List<string> 또는 아마도 HashSet<string>을 만든 다음 그을 비교합니다. 다른 이유로 문자열 표현을 작성해야하는 경우 별도로 수행하십시오. (주문 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

해시 셋에 여러 주문을 추가하는 방법은 무엇입니까? – 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); 

처럼 똑바로 일부 사용자 지정 Order 클래스의 IEnumerable들보다는 string의에이 일을 고려할 수 있습니다.