Как я могу разумно сгруппировать строки целых чисел для граненого поиска? - PullRequest
2 голосов
/ 31 декабря 2010

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

По сути, мой веб-сайт перечисляет пользователяжилые помещения.Каждый из них имеет цену аренды, которую пользователи смогут запрашивать в нашем новом окне поиска.

Поиск пользователей по городам, и в каждом городе я хотел бы представить различную арендугруппировка.То есть, если в городе № 1, если у нас есть списки в диапазоне от 200 до 1000 долларов, я бы хотел поставить флажки для:

  • меньше, чем 300
  • $ 301 - $ 500
  • $ 501 - $ 700
  • больше, чем $ 700

Однако, если город № 2 имеет значения в диапазоне от $ 500 до $ 1500, я хочу, чтобы вышеуказанные диапазоны соответственно изменились,Итак, если я скажу, что мне нужно 5 или 6 вариантов диапазона в каждом городе, я думаю, что у меня есть два варианта:

  1. Возьмите минимальное и максимальное значения и просто разделите разницу.Мне не нравится эта идея, потому что один листинг с арендной платой в размере 10 000 долларов отбросит всю шкалу.

  2. Интеллектуальный расчет диапазонов с использованием средних, медиан и т. Д.

Номер 2 - это то, с чем мне нужна помощь.Я веб-разработчик, который понимает логику, но никогда не был силен в математике и статистике в школе.Кто-нибудь может указать мне на руководство, которое поможет мне разобраться в этом?

Ответы [ 3 ]

2 голосов
/ 31 декабря 2010

Если вы ищете 4 группы, вам нужно 3 точки разделения. Возьмите медиану всего комплекта, чтобы получить средний, затем медиану тех, кто выше и ниже, чтобы получить два других.

0 голосов
/ 31 декабря 2010

Разделите ваши данные по количеству.

Примерно так (псевдо-C код): Пусть «set» - данные, «n» - количество записей, а «s» - количество разбиений.

int increment = ceil(n/s);
int start = 0;
int end = increment;
OrderSet(set); // So set[0] is min and set[n-1] is max
for (int i = 0; i < s; i++)
{
  while (set[end] == set[start] && end < n - 1)
    end++;
  AddGroup(start, end);

  if (end == n - 1)
    break;

  start = end;
  end = start + increment;
  if (end >= n)
    end = n - 1;
}
0 голосов
/ 31 декабря 2010

Вместо того, чтобы пытаться определить масштаб динамически на основе набора данных, почему бы не использовать статический масштаб (или формулу для определения масштаба), а затем определить, есть ли данные для поддержки отображения параметров поиска.

Например, если ваша шкала [(0-300), (301, 600), (601-700), ...] и ваш набор данных содержит [$ 250, $ 500, $ 550, $ 1000], то вам нужно будет отобразить [(0-300), (301-600), (1001-1300)].

Вы можете понять это с помощью LINQ.

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