2011-11-23 3 views
1

응용 프로그램에서 이미 존재하는 searchengine을 사용하는 새로운 방법으로 작업하십시오. 검색 전에 접두사를 사용하여 검색하기 전에 선호하는 값을 확인하는 대신 아이디어를 사용하는 것이 좋습니다. 이런 식으로 : "# 12345678"searchengine은 전화 번호에 대한 결과를 반환합니다.세 가지 값에 대해 일종의 목록을 구현하는 데 도움이 필요합니다.

이 검색은 세 가지 값으로 구성됩니다. SearchCriteria와 SearchType이라는 두 개의 enum을 가지고 있습니다. 세 번째 값은 실제 접두사를 문자열 값으로 사용합니다.

이 문제를 해결하는 가장 효율적인 방법은 무엇입니까? KeyValuePairs를 살펴 보았지만 조금 엉망이 된 것 같습니다.

사전에서 다른 가능성을 유지하려고 시도했습니다.

prefixes = new Dictionary<string, KeyValuePair<SearchCriteria, SearchType>> { 
    { values }, 
    { values } 
} 

제안 사항을 알려주십시오. :)

+0

당신이 당신의 예제에 대해 얘기하는 것은 불리는한다 ... 특정 접두사에 대한 유형을 & 기준을 얻기 위해 LINQ를 사용할 수있는 목록으로 다양한 검색 유형을 퍼팅 multimap 또는 multihash - http://en.wikipedia.org/wiki/Multimap – MattDavey

답변

2

이 정보를 보유 할 값 유형

public struct Search 
{ 
    public Search(SearchCriteria criteria, SearchType type, string prefix) { ... } 

    public readonly SearchCriteria Criteria; 
    public readonly SearchType Type; 
    public readonly String Prefix; 
} 

Search[] searches = new [] 
{ 
    new Search(SearchCriteria.PhoneNumber, SearchType.Match, "#"), 
    new Search(SearchCriteria.PostCode, SearchType.CaseInsensetive, "*") 
} 

string prefix = "#"; 

var searchCriteria = searches.Single(x => x.Prefix = prefix).Criteria; 
var searchType  = searches.Single(x => x.Prefix = prefix).Type; 
+0

+1 좋은 점은 읽기 전용입니다. – sehe

2

당신은 구조체

struct ValueParts 
{  
    public readonly SearchCriteria criteria; 
    public readonly SearchType type; 
    public readonly string prefix; 

    public ValueParts(SearchCriteria c, SearchType t, string p) 
    { 
     criteria = c; 
     type = t; 
     prefix = p; 
    } 
} 

아니면 C# 4.0 튜플 사용할 수 있습니다

Tuple<SearchCriteria, SearchType, string> tuple(
     SearchCriteria.Normal, /*just making that up*/ 
     SearchType.And,  /* that too*/ 
     "#12345678"); 

은 모두 '가장 효율적인'것을 단순한를 작성 뭐가 잘못

관련 문제