2008-11-24 44 views
3

對不起有關標題:)C#LINQ SEO一般編程問題,如何正確得到一個位置的結果?

這是我的基本問題,我試圖實現一個位置的SEO類型查詢。

這裏是我的例子

  • /利茲
  • /Leeds_England
  • /Hampshire_England
  • /England_Leeds
  • /Europe_England

我想獲得的位置,現在我正在分割'_',然後做一個LINQ查找通過我的列表的每個部分。 位置有

市 省 地區 國家 大陸

如果我找到一個具有更大的計數,我設置一個變量爲「cityFound」,並將結果追加到一個範圍內的位置。

然後我再次使用LINQ對這些分裂結果進行檢查,看看我得到了什麼,試着弄清楚每個拆分部分是否在同一個位置。

現在我覺得我做錯了,但我無法弄清楚「很好」的做法。我想我可以創建一個遞歸方法,或者我看完全錯了。

你們會如何解決這個問題?僞代碼很好,這是我陷入困境的邏輯!

Cheers,Sarkie。

+0

恐怕我發現你的問題很難理解。我可以看到這些是輸入的例子 - 你有什麼已知的信息? 「如果我找到一個更重要的人」,你是什麼意思?一個什麼,更重要的是什麼?你想得到什麼輸出? – 2008-11-24 20:31:05

回答

0

除了邏輯,我確實有一個建議。在建立基於位置的網址時,我總是發現,使用最大的地理位置和工作到最小的地點更容易。這是一個合乎邏輯的假設,即每個額外的「細化」都比父母更有針對性。定義一個嚴格的模式並堅持下去,因爲它會更容易維護。我注意到你的例子並不總是堅持你的模式,特別是最後一個在這個城市之前擁有大陸的人。

0

是的,這是問題,我知道我想從他們那裏得到什麼。但根據我們的「SEO」,它更好地允許多種類型。 (不要讓我開始)。

你會說最好先做最大的......如果我找到結果,請將其插回到方法中。可能值得一試。

我只是想確保我已經嘗試了每個參數拆分,因爲我不知道順序。

1

我對無序拆分的擔心是重複運行的可能性。請原諒我對揚州人對歐洲地理學的無知,並在我熟悉的美國地理學上給你。

拉斯維加斯是一個很好的開始。人們會想到拉斯維加斯,那個熱帶沙漠綠洲正在尋找吸引你的錢。當然,人們不會想到新墨西哥州的拉斯維加斯 - 只是內華達州的拉斯維加斯。鳳凰城,亞利桑那州和紐約鳳凰城也是如此。你的技術可行性需要成爲方程的一部分。相信我,我也與我們的搜索引擎人員有過這些相同的論點。我感到你的痛苦。

0

以下是我將如何做到這一點。在最糟糕的情況下,它仍然需要線性時間,但在正常情況下會平穩到一定的時間。

如果不重用對象,那麼這個實現仍然給你設置覆蓋處理拉斯維加斯鳳凰的能力。

它將允許您以任何位置屬性的順序進行查詢。 (原諒我的任何語法錯誤 - 我沒有編程的C#在一段時間)

class LocationResolver { 
    private IEnumerable<Location> locations; 
    private Map<String, Location> memory = new Map<String, Location>(); 

    public LocationResolver(IEnumerable<Location> locs) { 
     locations = locs; 
     // 
     // Add any locations that need disambiguation 
     // 
     memory["/Las Vegas"] = FromUrl("/Las Vegas_Nevada"); 
     memory["/Phoenix"] = FromUrl("/Phoenix_Arizona"); 
    } 

    public Location Resolve(string url) { 
     Location result; 
     if (memory.TryGet(url, out result)) { 
      result = FindWithParts(url.Substring(1).Split('_')); 
      memory[url] = result; 
     } 
     return result; 
    } 

    private Location FindWithParts(string[] parts) { 
     string[] locParts = new string[5]; 
     for (Location l in locations) { 
      locParts[0] = l.City; 
      locParts[1] = l.Province; 
      locParts[2] = l.Region; 
      locParts[3] = l.Country; 
      locParts[4] = l.Continent; 
      bool found = true; 
      for (int i = 0; i < parts.Length && found; i++) 
       found = Array.IndexOf(locParts, parts[i]) >= 0; 
      } 
      if (found) { 
       return l; 
      } 
     } 
     return null; 
    } 
} 
0

對不起忘了關這一點,我所做的是有一些變數。

CityText ProvinceText等

有關的_,我擡頭一看,如果我能找到的位置,如果我我可以設置該值每分裂。

CityText =利茲 ProvinceText =西約克郡

我再通過結果去和查找結果的位置。

所有位置==利茲

和所有位置==西約克郡

和X和X

然後,我有在底部滿足位置的所有部分的位置。

儘管代碼乾杯!

Sarkie。