2012-03-05 4 views
8

Я довольно новичок в Objective-C, и сегодня я работал с NSDictionaries и наткнулся на метод allKeys. Как я понимаю, он возвращает NSArray, содержащий ключи для словаря в случайном порядке. Однако, этот порядок всегда один и тот же? т.е. если я вызову allKeys в одном словаре 20 раз подряд, я гарантированно получаю тот же порядок результатов?NSDictionary allKeys - всегда ли он возвращает тот же порядок?

Спасибо,

ответ

8

При вызове метода 20 раз подряд на словарем , который не мутировал, он скорее всего будет возвращать тот же порядок. Тем не менее, я бы сильно отговорил вас от этого, поскольку он сильно зависит от деталей реализации. Единственная причина, по которой я говорю, что она, скорее всего, вернет тот же порядок, состоит в том, что доступ к словарю не должен мутировать любые внутренние структуры, и в отсутствие мутации единственным способом получить другой порядок было бы явно ввести недетерминированность, т. е. полагаться на глобальное состояние, например генератор случайных чисел или часы процессора, и я считаю крайне сомнительным, что NSDictionary делает все это.

Если вам нужно обеспечить одинаковый порядок ключей, вы должны, вероятно, просто отсортировать их, как только вы извлечете их из словаря.

+0

Если NSDictionary не делает ленивым Rehashing конечно, в этом случае доступ может привести к срабатыванию перепевы. –

+0

@Catfish_Man: Если бы это было так, было бы безопасно когда-либо передавать NSDictionary в другой поток. Современная мудрость диктует, что передача «NSDictionaries» между потоками безопасна, пока словарь неизменен. –

+0

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

0

То, как это понять, чтобы быстро написать тестовую программу. На самом деле, вы никогда не должны полагаться на не гарантированные, не документированные результаты, подобные этому. Это плохая практика программирования и, скорее всего, сломается с новой версией ОС.

Если вам нужны ключи, которые возвращаются в определенном порядке, вы должны отсортировать их после их получения. Вы можете сделать это с помощью группы методов -[NSArray sortedArrayUsing...].

1

Объекты NSDictionary неупорядочены для поддержания производительности.

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

http://code.google.com/p/cocoa-sorted-dictionary/

+0

Я посмотрю на это спасибо. – KerrM

Смежные вопросы