#ruby #set
#ruby #установить
Вопрос:
Предположим, у меня есть set в Ruby s1:
#<Set: {12, 25}>
Я использую s1.find_index(12) для получения индекса 0
Могу ли я использовать index для возврата элемента set, что-то вроде s1[0] для возврата 12?
Причина, по которой я хочу это сделать, в том, что мои элементы set большие. Я хочу сохранить ссылки между элементами set. Я использую индекс для хранения ссылок.
Я использую Ruby 1.9.3
Комментарии:
1. Зачем беспокоиться об индексах, когда ваши «большие элементы» в любом случае являются просто ссылками? Почему бы просто не сохранить указатель / ссылку?
2. То, что вы пытаетесь сделать, противоречит назначению наборов. Кажется, вы не понимаете, что такое set.
3. @muistoosh что я делаю, так это создаю эти структуры данных, а затем записываю их в JSON. Я думаю, что мне следует сохранить большие значения в ссылках и перед записью в JSON преобразовать в index, чтобы сэкономить место в JSON.
4. В этом случае вы должны использовать массив вместо Set .
5. @muistoosh Мне нужны уникальные элементы — вот почему я использовал set
Ответ №1:
Я думаю, вы хотите использовать Array
и a Hash
для этого.
ary = []
hsh = {}
unless hsh[item]
hash[item] = ary.size
ary << item
end
Затем, когда вы будете искать элемент в hsh
позже, у вас будет индекс элемента в списке, и фактически у вас будут внутренние элементы вашего set с определенной оговоркой
Ответ №2:
Возможно, это невозможно. Set — это неупорядоченный список.
Set реализует коллекцию неупорядоченных значений без дубликатов. Это гибрид интуитивно понятных средств взаимодействия Array и быстрого поиска в Hash.
Ответ №3:
Вы можете получить элемент из набора по его индексу следующим образом:
my_set = Set.new([1, 4, 7])
if index = my_set.find_index(4)
puts my_set.to_a[index]
end