Разделение строки несколько раз

Общие вопросы о Unity3D

Разделение строки несколько раз

Сообщение RaspadR 24 окт 2013, 13:17

Имеется строка, которая к примеру описывает свойства чего то. И нужно получить значение из строки. Делаю я это вот таким кодом:
Синтаксис:
Используется javascript
#pragma strict

public var recipe : String ="15 iron,20 copper,40 silver,60 gold";
private var arrayOfStrings : Array;

function Start () {

        arrayOfStrings = recipe.Split(","[0]);

}

function Update () {

}

function OnGUI () {

        for(var i=0; i<arrayOfStrings.length;++i){
                GUI.Box(Rect(Screen.width/2,32*i+0,100,20),""+arrayOfStrings[i]);
               
        }
       
}

Как понятно из кода, строка вида "15 iron,20 copper,40 silver,60 gold", будет выглядит как "15 iron","20 copper","40 silver","60 gold". Но как разделить эти "результаты" из "15 iron" в "15" и "iron", и адекватно иметь к ним доступ?
Аватара пользователя
RaspadR
UNITрон
 
Сообщения: 222
Зарегистрирован: 20 сен 2013, 19:00

Re: Разделение строки несколько раз

Сообщение KBEP 24 окт 2013, 13:46

Адекватно иметь доступ это как? Чего конкретно хочешь добиться?

Касаемо разделения "15" и "iron", используй всё тот же сплит, только с пробелом в качестве разделителя.
Аватара пользователя
KBEP
Старожил
 
Сообщения: 598
Зарегистрирован: 24 сен 2012, 23:23
Откуда: Калининград, СПб, Северодвинск

Re: Разделение строки несколько раз

Сообщение RaspadR 24 окт 2013, 14:18

1. Что хочу добиться... Есть такая игра Terraria. И мне довелось делать моды для её. Так вот рецепт предмета как раз был в виде как я привел. Поэтому решил что у себя тоже удобно использовать такой вариант.
1.1.Ну подразумевается нормальный доступ к конечному варианту(что и сколько), ну логично для проверки наличия вещей в нужном количестве и создания новой вещи.

2.Пробовал тем же методом. Но пока костылями можно сказать
Синтаксис:
Используется javascript
#pragma strict

public var recipe : String ="15 iron,20 copper,40 silver,60 gold";
private var arrayOfStrings : Array;
private var arrayOfStrings2 : String;
private var arrayOfStrings3 : Array;

function Start () {

        arrayOfStrings = recipe.Split(","[0]);
       
        for(var i=0; i<arrayOfStrings.length;++i){
                arrayOfStrings2 = arrayOfStrings[i];
               
                arrayOfStrings3=arrayOfStrings2.Split(" "[0]);
                //GUI.Box(Rect(Screen.width/2,32*i+0,100,20),""+arrayOfStrings[i]);
        }

}

function Update () {

}

function OnGUI () {

        for(var i=0; i<arrayOfStrings3.length;++i){
                GUI.Box(Rect(Screen.width/2,32*i+0,100,20),""+arrayOfStrings3[i]);
               
        }
       
        GUI.Box(Rect(Screen.width/2+100,0,100,20),""+arrayOfStrings.length);
        GUI.Box(Rect(Screen.width/2+100,32,100,20),""+arrayOfStrings3.length);

}

arrayOfStrings2- пришлось использовать так как команда Split, не робит с массивами.
Но толи тут мои конечности [curved_hands] , тол и другое, но разделяет он почему то только 4 компонент рецепта, на количество и компонент
Аватара пользователя
RaspadR
UNITрон
 
Сообщения: 222
Зарегистрирован: 20 сен 2013, 19:00

Re: Разделение строки несколько раз

Сообщение KBEP 24 окт 2013, 18:16

Для удобного доступа используй словарь:
Синтаксис:
Используется javascript
#pragma strict

import System.Collections.Generic;//чтоб Dictionary работал
import System.Convert;//чтоб работала функция ToInt32()

var recipe : String ="15 iron,20 copper,40 silver,60 gold";

//создаём словарь для удобного доступа к количеству ресурса по его имени,
//ключём словаря будет название ресурса, значением - его количество
var resource : Dictionary.<String, int>;

function Start ()
{
        var pair : String[] = recipe.Split(","[0]);//разбиваем исходную строку на массив пар, будет "15 iron", "20 copper" и т. п.
        resource = new Dictionary.<String, int>();//инициализируем словарь
        for (var i : int = 0; i < pair.Length; i++)//обходим все пары
        {
                var tmp : String[] = pair[i].Split(" "[0]);//временный массив для хранения имени ресурса и его количества
                //tmp[0] будет "15", tmp[1] будет "iron" и т. д.
                var value_ : int = ToInt32(tmp[0]);//переводим строковое значение количества в int
                resource.Add(tmp[1], value_);//записываем имя ресурса и соответсвующее ему количество
        };
        //теперь доступ стал удобным)))
        resource["iron"] = 100;
        Debug.Log(resource["iron"]);
        Debug.Log(resource["copper"]);
};
Аватара пользователя
KBEP
Старожил
 
Сообщения: 598
Зарегистрирован: 24 сен 2012, 23:23
Откуда: Калининград, СПб, Северодвинск

Re: Разделение строки несколько раз

Сообщение RaspadR 25 окт 2013, 11:13

Хм.. Очень похоже на 2 мерный массив.
Но как я понял, из примера для получения количества нужного реса мне нужно имя реса. Но я немного не понимаю как мне получить сам ресурс (так как нужно же проверять и тип реса и его количество, и выводить к примеру картинко реса в окне крафта в зависимости от его имени)
Аватара пользователя
RaspadR
UNITрон
 
Сообщения: 222
Зарегистрирован: 20 сен 2013, 19:00

Re: Разделение строки несколько раз

Сообщение Diab10 25 окт 2013, 11:28

RaspadR писал(а):Но я немного не понимаю как мне получить сам ресурс (так как нужно же проверять и тип реса и его количество, и выводить к примеру картинко реса в окне крафта в зависимости от его имени)


За вас всю игру написать? Это уже совсем другие вопросы, не те что в топике :)
Потом будет как эти ресурсы сделать чтоб добывать можно было, как инвентарь сделать...
Аватара пользователя
Diab10
Адепт
 
Сообщения: 3401
Зарегистрирован: 17 мар 2011, 20:42
Откуда: 123 RUS
Skype: diab1023

Re: Разделение строки несколько раз

Сообщение RaspadR 25 окт 2013, 11:44

НАЙН!
Аватара пользователя
RaspadR
UNITрон
 
Сообщения: 222
Зарегистрирован: 20 сен 2013, 19:00


Вернуться в Общие вопросы

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5