В чем разница между Set
и Array
в Ruby, за исключением того факта, что наборы сохраняют уникальные элементы, в то время как массивы могут содержать повторяющиеся элементы?
Set vs Array, разность
Ответ 1
Они очень разные.
Array
- Массив - упорядоченный список объектов.
- Доступ к массиву можно получить, указав его целую позицию в списке (с нулевой индексацией):
a[3]
ссылается на 4-й объект в массиве. - Нет ограничений на то, что значения могут быть: дублирующиеся значения разрешены в массивах.
- В массиве есть литеральная запись объекта:
[1, 'apple', String, 1, :banana]
(это создает и инициализирует новый массив). - Массивы встроены в базовую библиотеку ruby.
Set
- Набор представляет собой неупорядоченный пул уникальных объектов.
- Поскольку он неупорядочен, нет целочисленного индекса, который вы можете использовать для доступа к определенным элементам набора.
- Ограничение уникальности означает, что вы не можете иметь более одной копии значения в наборе.
- Для наборов нет литерала о литералах объектов, вы должны создать их через
Set.new
. -
Set
не является частью ядра, а является частью стандартной библиотеки и поэтому нуждается вrequire 'set'
.
Ответ 2
Для меня основное отличие заключается в том, что Set
реализованы как хэши, поэтому у вас есть тесты O(1)
для элементов.
Ответ 3
Другое важное отличие заключается в реализации метода include?
: Array сравнивает членов на основе результата метода ==
, а Set использует метод eql?
.