Могу ли я использовать index для получения элемента set в Ruby?

#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