Намерете близки стойности в масив

(Мога да използвам назъбен или многомерен масив, просто ще се позова на назъбен масив за този въпрос)

Имам назъбен масив [][], който има приблизително подобни стойности

 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 Откъде да започна с това за живота си, дори не знам откъде да започна.


person Siedge    schedule 27.02.2016    source източник
comment
Намерете i, j индекса на стойността, от която се нуждаете. И достъп до близки стойности като тази arr[i-1][j], arr[i+1][j] и така нататък. И, разбира се, трябва да обработвате крайни случаи, като проверявате дали изчислените индекси са в границите на масива.   -  person Yury Tarabanko    schedule 27.02.2016
comment


Отговори (2)


ако 2 е в ar[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]
    }
}

Също така внимавайте да боравите с границите на вашия масив (не се опитвайте да получите достъп до елементи извън масива).

Надявам се, че това ще ви насочи в правилната посока.

person Oskar Hýbl    schedule 27.02.2016

Нещо подобно, ако използвате 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();
    }
person Quinn    schedule 27.02.2016