2017-12-19 11 views
0

list1의 문자열 값이 list2에 있는지 여부를 확인하는 가장 효과적인 방법은 무엇입니까?가장 빠른 교차 검사 방법 2 서로 나열된 목록

의사 코드 예제

이 방법은 너무 느린 최고의 솔루션이 될 것입니다
StringList List1 = {"a", "b", "c", "d"}; 
StringList List2 = {"d", "c", "b", "a"}; 

foreach (string a in List1) 
{ 
    foreach (string b in List2) 
    { 
     if(a==b) 
     { 
      WriteLine("match"); 
     } 
    } 
} 

, 내가 사용하고있는 플랫폼은 BI #, 오프 파생 C 번호입니다. Array.Exists는 현재 라이브러리에 존재하지 않습니다.

+0

먼저 룩업 테이블을 정렬하거나 룩업 테이블을 만들면 종종 이차 알 고리보다 속도가 빨라집니다 – doctorlove

답변

3

당신은 Intersect 사용할 수 있습니다

var allIntersections = List1.Intersect(List2); 

foreach(string match in allIntersections) 
    Console.WriteLine(match); 

적어도 하나가 교차하는 경우는 그냥 알고 싶다면 :

bool anyExist = allIntersections.Any(); 
+0

'인터 섹트'는이 라이브러리에 존재하지 않지만 매우 유용한 아이디어를 제공합니다. think – ArraysRus

+0

@ArraysRus : 클래스 파일의 맨 위에'using System.Linq;'를 추가해야합니다. –

+0

@ArraysRus :'HashSet '이 있습니까? –

0

를 쉼표 deliminated 문자열로 목록을 변환, 표준 InString을 사용할 수 있습니다 이 경우 함수는 StringContains이라는 함수; 목록 1은리스트 2에서 모든 포함하지 않는 경우

foreach (string a in List1) 
{ 
    if(StringContains(a, NewString)) 
    { 
     WriteLine("Match"); 
    } 
} 
+0

얼마나 빨리 이것은 이중 루프를 사용하는 것입니다. 또한, 귀하의 deliminator 현명하게 선택 :) – zcui93

0
bool flag= list2.Except(list1).Any(); 

이 사실 일 것입니다.