C # LINQ SEO Общий вопрос программирования, как правильно получить результаты местоположения? - PullRequest
3 голосов
/ 24 ноября 2008

извините за заголовок:)

Вот моя основная проблема, я пытаюсь реализовать запрос типа SEO для местоположения.

Вот мои примеры

  • / Leeds
  • / Leeds_England
  • / Hampshire_England
  • / England_Leeds
  • / Europe_England

Я пытаюсь найти местоположение, теперь я делю на '_', а затем выполняю LINQ-поиск по спискам для каждой части. Расположение имеет

Город Провинция Область, край Страна Континент

Если я найду один с большим счетом, я установлю переменную как «cityFound» и добавлю результаты в ряд мест.

Затем я проверяю снова, используя LINQ для этих результатов на разделении, чтобы увидеть, что у меня есть, чтобы попытаться выяснить, находится ли каждая разделенная часть в одном месте.

Теперь я чувствую, что делаю это неправильно, но я не могу придумать, как сделать это "красиво". Я думаю, что мог бы создать рекурсивный метод, или я смотрю на него совершенно неправильно.

Как бы вы, ребята, решили эту проблему? Псевдокод в порядке, это логика, с которой я сталкиваюсь!

Приветствия, Сарки.

Ответы [ 5 ]

1 голос
/ 25 ноября 2008

Беспокойство, которое я испытываю при неупорядоченном разбиении, заключается в возможности появления дубликатов. Пожалуйста, прости мое невежество янки в отношении европейской географии, и передай его тебе в географии США, с которой я больше знаком.

Лас-Вегас - хорошее место для начала. Люди думают о Лас-Вегасе, о тропическом пустынном оазисе, который хочет высосать у вас деньги. Конечно, люди не думают о Лас-Вегасе, Нью-Мексико - просто Лас-Вегас, штат Невада. То же самое с Фениксом, Аризона и Фениксом, Нью-Йорк. Вы попадаете в точку, где техническая осуществимость должна быть частью уравнения. Поверьте мне, у меня были те же аргументы и с нашей поисковой машиной. Я чувствую твою боль.

0 голосов
/ 03 декабря 2008

Извините, я забыл закрыть это, у меня было несколько переменных.

CityText Провинциальный текст и т. Д.

Для каждого разбиения _ я смотрел вверх, смогу ли я найти местоположение, если смогу установить это значение.

CityText = Лидс ProvinceText = Западный Йоркшир

Затем я просмотрел результаты и посмотрел результаты, где.

Где все места == Лидс

и все места == Западный Йоркшир

и х и х

Тогда у меня есть местоположения внизу, удовлетворяющие всем частям местоположения.

Приветствия к коду, хотя!

Sarkie.

0 голосов
/ 02 декабря 2008

Вот как бы я это сделал. В худшем случае оно по-прежнему стоит линейного времени, но в обычных случаях оно сглаживается до постоянного времени.

Если вы не используете объект повторно, эта реализация все еще дает вам возможность установить переопределения для обработки Лас-Вегас и Феникс .

Это позволит вам запрашивать в любом порядке свойств местоположения. (Извините за любые синтаксические ошибки - я некоторое время не программировал 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 голосов
/ 25 ноября 2008

Да, это проблема, я знаю, чего я хочу от них. Но согласно нашему «SEO» лучше разрешить несколько типов. (Не начинай меня).

Вы сказали бы, что лучше сначала сделать самый большой ... и если я найду результат, включите его обратно в метод. Может быть стоит выстрел.

Я просто хочу убедиться, что я пробовал каждое разделение параметров, так как я не знаю порядок.

0 голосов
/ 24 ноября 2008

В стороне от логики, у меня есть одна рекомендация. При создании URL-адресов на основе местоположения мне всегда было проще работать с самым большим географическим местоположением и работать с самым маленьким. Логично предположить, что каждое дополнительное «уточнение» более целенаправленно, чем родительское. Определите строгий образец и придерживайтесь его, потому что это будет легче поддерживать. Я замечаю, что ваши примеры не всегда соответствуют вашему шаблону, в частности, последний пример с континентом перед городом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...