2016-12-25 24 views
1

私のコードのパフォーマンスに依存する部分はDで作業しています。このために、後で使用できるように、データをRegexにマッピングする連想配列を作成したいと考えています。連想配列キーとしての正規表現?

これを実行しようとすると、エラーindex is not a type or expressionが返されます。この正規表現を配列キーとして使用するにはどうすればよいですか?

編集:コードの場合は、ここで私は私のクラスで定義しようとしているものです:

View[Regex] m_routes; 

私が欲しい、私は以下のようなルートを追加できるようにすることを:

void add(string route, View view) 
{ 
    auto regex = regex(route.key, [ 'g', 'i' ]); 

    if (regex in m_routes) 
     throw new Exception(format(`Route with path, "%s", is already assigned!`, route)); 

    m_routes[regex] = view; 
} 

これでしょう私は、この方法で示されている、それぞれを再構築することなく、経路に対して正規表現を確認することができます。

View check(string resource) 
{ 
    foreach (route; m_routes.byKeyValue()) 
    { 
     auto match = matchAll(resource, route.key); 

     // If this regex is a match 
     // return the view 
     if (!match.empty) 
     { 
      return route.value; 
     } 
    } 

    return null; 
} 

どんな助けもありがとう、ありがとう!

+0

あなたは問題を示すいくつかのサンプルコードを提供する場合あなたを助けるために容易になります。 –

+0

@JonathanMDavisは私が達成しようとしているもののいくつかのコードを追加しました – Tinfoilboy

答えて

5

std.regex.Regexタイプパラメータを取る別名であると思われる:

(std.regex.package、リリース2.071.0でライン289から)すなわち

public alias Regex(Char) = std.regex.internal.ir.Regex!(Char); 

正規表現のchar型を指定する必要があります。 stringのために、それはcharだろう:

View[Regex!char] m_routes; 
+0

ありがとう、これは修正しました! 答えとして受け入れます。 – Tinfoilboy

関連する問題