質問

再設計中の大規模なWebサイト用にカスタム404ページを作成しています。顧客がブックマークした可能性のある約40の使用頻度の高いページがあり、新しいサイト構造によってこれらのブックマークが壊れます。

カスタム404ページで、古いURLを使用してこれらの使用頻度の高いページの1つに移動しようとした場合、新しいURLを通知したいと思います。 404ページには、<!> quot; did-you-want-this?<!> quot;の動的コントロールがいくつかあります。ダイアログのタイプ、および<!> quot; if-so-go-here(およびブックマークを更新)<!> quot;ダイアログのタイプ。それは簡単な部分です。

新しいURLを提案するために、リクエストされたURLを見ています。キーワードが含まれている場合は、それに基づいて新しいURLを提案し、404で適切な「やりたいこと...」と「もしそうなら...」という提案を実行します上記のページ。

だから、これらの40のようなキー/値のペア(キーワード/新しいURLのペア)をデータ構造に保存したいのですが、何が最適かわかりません。辞書? IDictionary?違いは何ですか、どちらがより適切ですか?

または、私は完全に間違った方向に進んでいますか?

お時間をいただきありがとうございます。

役に立ちましたか?

解決

辞書を使用します<!> lt; T、T <!> gt; System.Collections.Generic名前空間から。

他のヒント

NameValueCollectionを使用できます。

これはあなたのユースケースにとっては多すぎるかもしれませんが、私はおそらくUriごとに複数のキーワードと相対的な重みスコアを許可します。次に、一致するキーワードを動的にスコア付けします。

class UriSuggester {
   private List<SuggestedUri> Uris { get; set; }

   Uri[] GetSuggestions(Uri originalUri) {
      var suggestionHits = new Dictionary<SuggestedUri, int>();
      foreach (var keyword in KeyWords.Parse(originalUri)) {
         // find suggestions matching that keyword
         foreach (var suggestedUri in Uris.Where(u => u.Keywords.Contains(keyword)) {
           // add a hit for keyword match
           suggestionHits[suggestedUri] += 1;
         }
      }
      // order by weight * hits
      return suggestionHits.Keys
        .OrderBy(s => s.Weight * suggestionHits[s])
        .Select(s => s.Uri)
        .ToArray();
   }
}

class SuggestedUri {
   public Uri Suggested { get; set; }
   public int Weight { get; set; }
   public Keyword[] Keywords;
}

class Keyword {
   public string Value { get; set; }
   public static Keyword[] Parse(Uri uri);
   override Equals;
   override GetHashCode;
}

辞書は問題ありません。インターフェースタイプIDictionaryまたはDictionaryとして保存するかどうかは、この場合、404ページ自体を除き、あまり渡されないため、それほど重要ではありません。

古いURLを引き続きサポートするために、URLの書き換えを行うことを検討しましたか?

独自のクラスロジックを作成し、それを次のようにListデータ構造に割り当てることを検討できます。

public class KeyValuesClass
{
    private string a_key;
    private string a_value;

    public KeyValuesClass(string a_key, string a_value)
    {
           this.a_key = a_key;
           this.a_value = a_value;
    }

    public string Key
    {
        get{ return a_key; }
        set { a_key = value; }
    }

    public string Value
    {
        get{ return a_value; }
        set { a_value = value; }
    }

}

コードのどこか

List<KeyValuesClass> my_key_value_list = new List<KeyValuesClass>();
my_key_value_list.Add(new KeyValuesClass("key", "value");

しかし、私たちの仲間のプログラマーが上で述べたように、辞書を検討することができます:)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top