Как связать строковые элементы (возможно, в массиве) с индексом сетки в c # [unity3d] - PullRequest
0 голосов
/ 26 апреля 2019

Есть двумерная сетка, например, 7 (столбец) x16 (строка). Всего получено 111 клеток с индексом от 0 до 111. По периметру этой сетки расположены 7 цифр и 16 букв. Я хочу ссылаться на индекс каждой отдельной ячейки не по их номеру, а, например, использовать текстовое поле для отправки команд 1a, 2b, 3c и т. Д.

Я ввел его так, чтобы строковый элемент массива - «numbers [0]» и «letters [0]» был равен исходной ячейке сетки с номером 0. Тогда оказывается, что для связывания элементов массивов с индексом сетки необходимо будет добавить +1 к строковому элементу «letters [0] -> letters [1]» в случае, когда значение строки сетки делает не изменяется, но изменяется столбец (например, 1a -> 1b). И в этом случае добавьте +16 к значению предыдущего ряда сетки (1a -> 2a). Я пытался создать два одномерных массива «numbers []» и «letters []» с циклом для, но у меня возникла проблема, и как на самом деле связать данные этого массива с индексом ячейки, если я знаю число столбцов и рядов сетки.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class GridsNL : MonoBehaviour {


public int indexCellStart;
private int countRow;
private int countColumn;



// Use this for initialization
void Start () {

    Grid grid = Grid.instance;
    countRow = grid.rowCount;
    countColumn = grid.columnCount;
    CreateArray();   
}


// Update is called once per frame
void Update () {

}



public void CreateArray()
{

    int[] numbers = new int[countRow];

    for (int countRow = 0; countRow < numbers.Length; countRow++)
    {

        //Debug.Log(countRow);

    }

    string[] letters = new string[countColumn]

    for (int countColumn = 0; countColumn < letters.Length; 
    countColumn++)
    {

        //Debug.Log(countColumn);

    }



    }

Я понимаю, что, возможно, мне нужно использовать какую-то циклическую конструкцию внутри массива.

1 Ответ

1 голос
/ 26 апреля 2019

Я бы либо использовал многомерный массив, например,

string[,] stringArray = new string[rowCount, columnCount];

, к которому вы позже обратитесь, например,

for(int r = 0; r < rowCount; r++)
{
    for(int c = 0; c < columnCount; c++)
    {
        var certainValue = stringArray[r, c];

        ...
    }
}

Или, если вы хотите, чтобы одномерный массив

string[] stringArray = new string[rowCount * columnCount];

И повторять его, например,

for(int r = 0; r < rowCount; r++)
{
    for(int c = 0; c < columnCount; c++)
    {
        var certainValue = stringArray[r * columnCount + c];

        ...
    }
 }

К ним не будет обращаться что-то вроде 2c, но в конце это не имеет особого смысла, и вы должны придерживаться этих int вместо индексов ...

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

char someExampleChar = 'e'; // what you get from the InputField
int indexInt = (int) someExampleChar - (int) 'a';

, который преобразует значение символа в индекс 0.

В качестве простого метода расширения, например

public static class CharExtensions
{
    public static int ToIndex(this char character)
    {
        return (int) character - (int) 'a';
    }
}

Тогда вы можете просто использовать

char someExampleChar = 'f';
int index = someExampleChar.ToIndex();

Напечатано на смартфоне, поэтому никаких гарантий, но я надеюсь, что идея станет ясной

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