Позиция приращения, если массив строковых данных отличается C# (Unity)

Мне нужна помощь с табло, которое я делаю. Вот табло, которого я хочу достичь:

Позиция приращения, если массив строковых данных отличается C# (Unity)

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

Итак, пока я сделал это:

if (gametable_no == 1)
{
    for (int i = 0; i < tzPlayInfo.Instance.bc_gametable_history_list.Count; i++)
    {
        newString[0] += tzPlayInfo.Instance.bc_gametable_history_list[i].r;
        newString[0] += ",";
    }
    string[] groupedString = newString[0].Split(',');

    foreach (string allchars in groupedString)
    {
        int x = 0;
        int y = 0;

        GameObject o = Instantiate(prefab_big_road[0]) as GameObject;
        o.transform.SetParent(pos_big_road[0]);
        o.transform.localScale = Vector3.one;
        o.transform.localPosition = new Vector3(2.0f, -5.0f, 0f);
        o.transform.localPosition = new Vector3(o.transform.localPosition.x + x,
            o.transform.localPosition.y + y, o.transform.localPosition.z);

        if (allchars.Contains(playerwinnopairboth))
        {
            o.GetComponent<UISprite>().spriteName = "layout_player_bigline-01";
            NGUITools.SetActive(o, true);
        }

        if (allchars.Contains(bankerwinnopairboth))
        {
            o.GetComponent<UISprite>().spriteName = "layout_banker_bigline-01";
            NGUITools.SetActive(o, true);
        }

        if (allchars.Contains(tienopairboth))
        {
            o.GetComponent<UISprite>().spriteName = "layout_tie_bigline-01";
            NGUITools.SetActive(o, true);
        }
    }
}

Этот код будет работать только так:

Позиция приращения, если массив строковых данных отличается C# (Unity)

Вывод генерируется случайным образом, поэтому, например, у меня есть следующие выходные данные:

Gametable 1 history : P  ,P  ,P  ,B   ,B P,P P,TBP

Мне нужно знать, является ли символ изменение в gametable 1 history data.

Например: Результат должен быть таким

Позиция приращения, если массив строковых данных отличается C# (Unity)

Если значение не меняется, как P ,P ,P, то позиция будет увеличиваться только по оси y, а затем, если следующее значение отличается от B ,, то оно переместится к оси x.

Есть ли способ определить, отличается ли символ в вашем массиве строки от другого значения?

ИЗМЕНИТЬ

string[] newString = new string[4];

string[,] table = new string[70, 70];

string previousValue = "placeholder";
int xIndex = -1;
int yIndex = 0;

// First table
if (gametable_no == 1)
{
    for (int i = 0; i < tzPlayInfo.Instance.bc_gametable_history_list.Count; i++)
    {
        newString[0] += tzPlayInfo.Instance.bc_gametable_history_list[i].r;
        newString[0] += ",";
    }

    //string[] groupedString = GroupString(newString[0]);
    string[] groupedString = newString[0].Split(',');
    foreach (var allchars in groupedString)
    {
        GameObject o = Instantiate(prefab_big_road[0]) as GameObject;
        o.transform.SetParent(pos_big_road[0]);
        o.transform.localScale = Vector3.one;

        if (table.GetLength(0) < xIndex)
        {
            break;
        }

        if (allchars.Equals(previousValue) && table.GetLength(1) < yIndex)
        {
            yIndex += 15;
            table[xIndex, yIndex] = allchars;
        }
        else
        {
            xIndex += 15;
            yIndex = 0;
            table[xIndex, yIndex] = allchars;
        }
        previousValue = allchars;

        o.transform.localPosition = new Vector3(xIndex, yIndex, 0f);

        // Match the sprites
        if (previousValue.Contains(playerwinnopairboth))
        {
            o.GetComponent<UISprite>().spriteName = "layout_player_bigline-01";
            NGUITools.SetActive(o, true);
        }

        if (previousValue.Contains(bankerwinnopairboth))
        {
            o.GetComponent<UISprite>().spriteName = "layout_banker_bigline-01";
            NGUITools.SetActive(o, true);
        }

        if (previousValue.Contains(tienopairboth))
        {
            o.GetComponent<UISprite>().spriteName = "layout_tie_bigline-01";
            NGUITools.SetActive(o, true);
        }
    }

Он генерирует только несколько сборных:

Позиция приращения, если массив строковых данных отличается C# (Unity)

Хотя я уже сформировал эти данные:

Позиция приращения, если массив строковых данных отличается C# (Unity)

В моем интерфейсе отображается только два:

Позиция приращения, если массив строковых данных отличается C# (Unity)

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
0
126
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Я бы предложил использовать в качестве таблицы многомерный массив. Может как то так?

string[,] table = new string[30, 6];

string previousValue = "placeholder";
int xIndex = -1;
int yIndex = 0;

foreach (var value in groupedString)
{
    if (table.GetLength(0) < xIndex)
    {
         break;
    }

    if (value.Equals(previousValue) && yIndex < table.GetLength(1))
    {
        yIndex += 1;
        table[xIndex, yIndex] = value;
    }
    else
    {
        xIndex += 1;
        yIndex = 0;
        table[xIndex, yIndex] = value;
    }
    previousValue = value;
}

Теперь у вас должна быть таблица, содержащая все значения, которые вы затем можете отобразить в своем пользовательском интерфейсе и соответственно сопоставить правильный спрайт.

Могу я сначала спросить, что это, сэр, извините, string[,] table = new string[6, 30]

Ginxxx 02.05.2018 08:56

а string previousValue = "placeholder"?

Ginxxx 02.05.2018 09:04

Строка [,] - это многомерный массив. Если вы визуализируете это, это будет похоже на загруженное вами изображение. Если вы наберете table [0,0], вы получите доступ к верхней левой ячейке. таблица [1,0] приведенная ниже. table [0,1] 2-я строка, первая ячейка и так далее. Числа в инициализации массива (первая строка) должны соответствовать размерам вашей таблицы. В моем примере это 6 глубин и 30 длин.

Immorality 02.05.2018 09:07

"placeholder" - это заполнитель, который перезаписывается предыдущим значением на первой итерации foreach. Его первое значение должно быть любым, если оно не является значением, содержащимся в вашей groupedString.

Immorality 02.05.2018 09:08

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

Ginxxx 02.05.2018 09:14

Я отредактировал свой код, чтобы добавить проверки на длину массива, которые предотвращают ошибки индекса за пределами диапазона. Сообщите мне, работает ли код для вас!

Immorality 02.05.2018 09:18
table.GetLength(2) это не может быть преобразовано из int в bool
Ginxxx 02.05.2018 09:20

Ой. моя вина. Должно быть исправлено сейчас

Immorality 02.05.2018 09:22

Почему он не появляется, сэр? Вот результат вашего кода imgur.com/a/26tm8lo. 01.big_road - это gametable 1 history

Ginxxx 02.05.2018 09:27

Я бы рекомендовал создавать экземпляры объектов в отдельном методе в зависимости от их положения в массиве. Мне кажется, что теперь вы создаете их экземпляры поверх друг друга. Я сейчас на работе и не могу написать за вас ваш код. Я просто подтолкнул вас в правильном направлении.

Immorality 02.05.2018 09:31

хорошо, сэр. Спасибо, я продвигаю ваш код еще раз. Спасибо. Надеюсь, я смогу это сделать

Ginxxx 02.05.2018 09:32

Привет сэр . Код, который вы указали, имеет только это значение. И в нем есть ошибка array is out of range. Пожалуйста, посмотрите мою правку

Ginxxx 02.05.2018 10:00

Вы должны только увеличить индекс X и Y на 1 в позициях, которые я установил в своем коде. Не меняйте это. Если вы хотите сгенерировать новый вектор, используя координаты X и Y, затем умножьте их на Vector3 следующим образом: o.transform.localPosition = new Vector3 (xIndex * 15, yIndex * 15,0f);

Immorality 02.05.2018 11:58

да уже сделал это, сэр. Но есть проблема, сэр, после первой итерации он создает экземпляр всего значения, которое мне нужно, затем после 2-й итерации, сэр, теперь он удваивает все мои префабы. Что я имею в виду под второй итерацией, сэр, так это то, что каждые 10-15 секунд может быть значение данных P, P, P, B. Добавляет букву, например, через 15 секунд она добавит букву P, поэтому теперь значение данных - P,P,P,B,P.

Ginxxx 02.05.2018 12:11

Спасибо Безнравственность за то, что показал мне его ответ, это действительно правильный вариант, но отсутствует условие:

if (table.GetLength(0) < xIndex)
            {
                break;
            }

            if (previousValue.Equals(newPreviousValue) && yIndex < table.GetLength(1))
            {
                yIndex += 1;
                table[xIndex, yIndex] = previousValue;
            }
            else
            {
                xIndex += 1;
                yIndex = 0;
                table[xIndex, yIndex] = previousValue;
            }
            newPreviousValue = previousValue;

поэтому вместо table.GetLength(1) < yIndex он должен быть yIndex < table.GetLength(1).

Другие вопросы по теме