Set vs Array, разница - PullRequest
       2

Set vs Array, разница

19 голосов
/ 01 декабря 2011

В чем разница между Set и Array в Ruby, за исключением того факта, что наборы сохраняют уникальные элементы, в то время как массивы могут содержать повторяющиеся элементы?

Ответы [ 3 ]

31 голосов
/ 01 декабря 2011

Они очень разные.

Массив

  • Массив - это упорядоченный список объектов.
  • Доступ к значению массива можно получить, сославшись на его целочисленную позицию в списке (с нулевым индексом): a[3] ссылается на четвертый объект в массиве.
  • Нет ограничений на то, какие значения могут быть - дублироватьдопустимы значения в массивах.
  • Массив имеет буквенную запись объекта: [1, 'apple', String, 1, :banana] (это создает и инициализирует новый массив).
  • Массивы встроены в базовую библиотеку ruby.

Набор

  • Набор - это неупорядоченный пул уникальных объектов.
  • Поскольку он неупорядочен, целочисленный индекс отсутствует.можно использовать для доступа к определенным элементам набора.
  • Ограничение уникальности означает, что в наборе не может быть более одной копии значения.
  • Для наборов не существует литеральной нотации объекта, вы должны создать их через Set.new.
  • Set не является частью ядра, bявляется частью стандартной библиотеки и, следовательно, нуждается в require 'set'.
20 голосов
/ 01 декабря 2011

Для меня главное отличие в том, что Set s реализованы в виде хэшей, поэтому у вас есть O(1) тесты членства для элементов.

4 голосов
/ 19 декабря 2012

Другое важное отличие заключается в реализации метода include?: массив сравнивает элементы на основе результата метода ==, а набор использует метод eql?.

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