2016-02-27 4 views
1

(я могу использовать Jagged или многомерный массив, я просто сослаться на Jagged один на этот вопрос)Найти близлежащие значения в массиве

У меня есть Jagged массив [] [], который имеет значение примерно так

1 3 1 1 1 
1 3 3 3 1 
1 1 2 1 1 
1 3 1 3 1 
1 1 1 1 1 

Теперь я хочу найти значения сразу рядом с 2 так 5 3 и 3 1. С чего начать с моей жизни, я даже не знаю, с чего начать.

+1

Найти 'я, j' индексы стоимости вам нужно. И получить доступ к близлежащим значениям, подобным этим 'arr [i-1] [j], arr [i + 1] [j]' и так далее. И, конечно же, вам нужно обрабатывать граничные случаи, проверяя, вычислены ли индексы в границах массива. –

+1

Возможный дубликат [Требуется рабочий код C# для поиска соседей элемента в 2-мерном массиве] (http://stackoverflow.com/questions/5640538/need-working-c-sharp-code-to-find-neighbors -of-an-element-in-a-2-dimentional-arr) –

ответ

1

если 2 находится в ар [I] [J], то вы можете искать соседние позиции с 2 по циклам, как это:

for (int x = i - 1; x <= i + 1; x++) {  
    for (int y = j - 1; y <= j + 1; y++) { 
     if (x == i && y == j) 
      continue; // skip the position where your 2 is 
     // do your logic here - count the value at ar[x][y] 
    } 
} 

быть также тщательно обрабатывать границы вашего массива (дон Не пытайтесь получить доступ к элементам за пределами массива.

Надеюсь, это укажет вам в правильном направлении.

0
for (int x = i - 1; x <= i + 1; x++) 
{ 

    for (int y = j - 1; y <= j + 1; y++) 
    { 

     if (x == i && y == j) 
     // do something here 
    } 
} 

или вы можете использовать 2, тогда как петли он будет делать тот же самый эффект

+0

Я не думаю, что это действительно отвечает на вопрос. Что такое i и j? –

+0

Показатели ценности, которые ему нужны. –

1

что-то вроде этого, если с помощью Linq:

static void Main(string[] args) 
    { 
     int[,] array2D = new int[,]{ 
     { 1, 3, 1, 1, 1 }, 
     { 1, 3, 3, 3, 1 }, 
     { 1, 1, 2, 1, 1 }, 
     { 1, 3, 1, 3, 1 }, 
     { 1, 1, 1, 1, 1 }}; 
     var resultList = GetNearbyValues(array2D, 2, 2); 
    } 

    private static List<int> GetNearbyValues(int[,] array2D, int i, int j) 
    { 
     var values = from x in Enumerable.Range(i - 1, i + 1) 
        from y in Enumerable.Range(j - 1, j + 1) 
        // make sure x and y are all positive 
        where x >= 0 && y >= 0 && (x != i | y != j) 
        select array2D[x, y]; 
     return values.Cast<int>().ToList(); 
    } 
Смежные вопросы