Многомерный массив - PullRequest
       1

Многомерный массив

1 голос
/ 21 сентября 2010

У меня есть 2 предмета, связанных друг с другом, к которым нужно обращаться отдельно.Название книги и сколько у нее страниц.Я сделал массив для названий, но как лучше связать количество страниц в этой книге с этим заголовком?

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

<string-array name="books">
    <item pages="428">"book1"</item>
    <item pages="599">"book2"</item>
    <item pages="204">"book3"</item>
</string-array>

Ответы [ 2 ]

8 голосов
/ 22 сентября 2010

Вы могли бы пойти с XPath , но ИМХО это было бы излишним.

Для меня это звучит так, будто вам нужна какая-то Карта, чтобы отслеживать страницы. Я бы лично избегал использования массива строк (поскольку я не думаю, что в любом случае есть ссылка на атрибут для элемента) следующим образом:

// create HashMap to write pages to
Map<String, Integer> bookPageMapping = new HashMap<String, Integer>();
bookPageMapping.put("book1", 428);
bookPageMapping.put("book2", 599);
bookPageMapping.put("book3", 204);

Вы также можете поместить книжные литералы в strings.xml следующим образом и ссылаться на них так же:

strings.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="app_name">MultiArray</string>
    <string name="book1">book1</string>
    <string name="book2">book2</string>
    <string name="book3">book3</string>
</resources>

Тогда вы будете ссылаться на файлы в вашем коде следующим образом:

// create HashMap to write pages to
Map<String, Integer> bookPageMapping = new HashMap<String, Integer>();
bookPageMapping.put(getString(R.string.book1), 428);
bookPageMapping.put(getString(R.string.book1), 599);
bookPageMapping.put(getString(R.string.book1), 204);

Или вы можете использовать массив строк:

strings.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="app_name">MultiArray</string>
    <string-array name="books">
        <item>book1</item>
        <item>book2</item>
        <item>book3</item>
    </string-array>
</resources>

Затем заполните хэш-карту соответственно:

// get the String array from resources
Resources res = getResources();
String[] books = res.getStringArray(R.array.books);

// create HashMap to write pages to
Map<String, Integer> bookPageMapping = new HashMap<String, Integer>();
bookPageMapping.put(books[0], 428);
bookPageMapping.put(books[1], 599);
bookPageMapping.put(books[2], 204);

Для получения дополнительной информации посетите сайт разработчика Android и выполните поиск по строковым ресурсам или карте. Я бы непосредственно разместил эти ссылки, но, поскольку я новый пользователь, я не могу опубликовать более 1 гиперссылки. Кстати, это мое первое сообщение о переполнении стека, так что будьте осторожны:)

1 голос
/ 22 сентября 2010

Не лучше ли это?

<books>
    <book>
        <pages>428</pages>
        <title>book1</title>
    </book>
    <book>
        <pages>599</pages>
        <title>book2</title>
    </book>
    <book>
        <pages>204</pages>
        <title>book3</title>
    </book>
</books>

Выражение XPath для получения количества страниц будет

/books/book[title='book1']/pages

Если вы беспокоитесь о размере, то это:

<books>
    <book pages="428" title="book1"/>
    <book pages="599" title="book2"/>
    <book pages="204" title="book3"/>
</books>

И выражение XPath:

/books/book[@title='book1']/@pages
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...