2011-11-23 54 views
1

在应用程序中使用已有的搜索引擎的新方法。这个想法是使用前缀进行搜索,而不是在搜索前检查复选框中的首选值。就像这样:“#12345678”,而searchengine会返回一个电话号码的结果。需要帮助实现三种值的某种列表

问题是此搜索包含三个值。我有两个枚举SearchCriteria和SearchType。第三个值是作为字符串值的实际前缀。

解决此问题的最有效方法是什么?一直在寻找KeyValuePairs,但这似乎最终有点混乱。

我试过在字典中持有不同的可能性。

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

请问? :)

+0

你在你的例子在谈论所谓的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; 
} 

把你的各种搜索类型分为您可以使用LINQ来获取类型&标准的特定前缀列表...

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 readonlyvalueype – 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"); 

双方将是 '最有效'