Вариант за обхождане на матрици в разлчни посоки чрез един и същ метод* с delegate и lambda expression
Здравейте,
Вчера решавах задачата "Clearing Commands" от Advanced C# Exam Problems Practice в нея според това на каква команда попаднем трябва да обходим даден ред/колона от матрица или хоризонтално (наляво или надясно), или вертикално(нагоре или надолу) и да спрем в даден случеай. Това са 4 посоки.
За всяка посоките може да се напише метод.
Обхожданията по която и да е посока обаче си приличат доста - един от индексите нараства или намалява а другият си остава същия, което значи че не е необходимо за всяка посока да се напише метод а само за две. Единият с нарастващ цикъл другият с намалящ.
Е хубаво съкратихме си работата на половина, но като цяло нещата пак са доста еднакви, само ако имаше начин просто да подам на цикъла знака + или - за да му кажа в каква посока да се движи и всичко щеше да работи с един метод.
Няма да се изненадам и да има такъв начин (да се подаде математически оператор, не знакът като char) но аз се сетих за друго - не мога ли да му подам на този метод една ламбда функция която да приема i и да казва какво да става с този i (i++ или i--) и така стигнах до следното решение
Конкретно за тази задача не е кой знае колко полезно, но за задача която има и диагонални посоки това много лесно може да се осъществи като във lambda функцията се подаде кой индекс да нараства и кой да намалява (или и двата да нарастват/намаляват зависи от диагонала).
Споделям решението защото съм попадал вече на няколко подобни задачи които те карат да обходиш дадена матрица в дадени посоки - като задачите за игрите с ходове, сещам се и за една от домашното в която се искаше да се намери най - дългата последователност в дадена посока.