Группировка соседних записей с одинаковым значением в двумерном массиве - PullRequest
0 голосов
/ 29 июня 2018

РЕДАКТИРОВАТЬ: теперь я понял, что вопрос не подходит для стека, но я все равно получил много полезных советов. Спасибо всем!

У меня есть двумерный массив, и я хочу сгруппировать соседей с одинаковым значением. Использование C # (работа с единицей).

Допустим, у меня есть это:

int[,] array {   
    0,0,0,0,0,0,1,0,0,0,  
    0,1,1,0,0,0,1,0,0,0,  
    0,1,0,0,0,0,0,0,0,0,  
    0,0,0,0,0,0,1,1,1,0,  
    0,0,0,0,0,0,1,1,1,0  
}

Есть три "кластера" 1: с. Я хочу добавить их в словарь с некоторой переменной для идентификации. Поэтому, возможно, сначала добавьте соседние значения в список, добавьте этот список в словарь, очистите список и перейдите к следующему кластеру.

В реальной жизни столбцы и строки будут одинаковой длины.

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

Я пытался изучить Array.Sort, но ресурсы, которые я нашел, были исключительно о сортировке значений в порядке убывания. Просто указав мне в правильном направлении, некоторые важные веб-ресурсы будут с благодарностью!

1 Ответ

0 голосов
/ 29 июня 2018

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

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

  1. Создать список кластеров
  2. Для каждого элемента в сетке проверьте, равен ли он единице.
  3. Если это единица, проверьте, есть ли у него сосед, который является частью кластера. Если это так, добавьте его в этот кластер, иначе создайте новый кластер и добавьте его.

Если бы потом пробежался по бумаге на небольшом примере.

Если у вас есть нужный алгоритм, поместить его в словарь и отсортировать его должно быть тривиально.

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