У меня есть большое количество процессов, которые мне нужно отслеживать в наборе ets, а затем случайным образом выбирать отдельные процессы. Итак, я создал такой набор:
:ets.new(:pid_lookup, [:set, :protected, :named_table])
тогда ради аргумента давайте просто вставим self()
1000 раз:
Enum.map 1..1000, fn x -> :ets.insert(:pid_lookup, {x, self()}) end
Теперь мне нужно выбрать один наугад. Я знаю, что могу просто выбрать случайный с помощью :ets.lookup(:pid_lookup, :rand.uniform(1000))
, но что, если я заранее не знаю размер набора (в приведенном выше случае 1000)?
Как узнать размер набора ets? И/или есть ли лучший способ выбрать случайный pid из структуры данных ets?
:ets.info(tab, :size)
, чтобы получить размер таблицы. Я действительно не знаю лучшего варианта захвата случайного элемента из него. Каков вариант использования случайного pid из набора? - person Justin Wood   schedule 10.12.2018ets.info(<table name>, :size)
в ответ, и я приму его. - person Thomas Browne   schedule 12.12.2018