Wybieranie elementu losowego ze zbioru

Jak wybrać element losowy ze zbioru? Szczególnie interesuje mnie wybranie przypadkowego elementu z HashSet lub LinkedHashSet, w Javie. Mile widziane są również rozwiązania dla innych języków.

Author: Sébastien RoccaSerra, 2008-09-24

30 answers

int size = myHashSet.size();
int item = new Random().nextInt(size); // In real life, the Random object should be rather more shared than this
int i = 0;
for(Object obj : myhashSet)
{
    if (i == item)
        return obj;
    i++;
}
 76
Author: Khoth,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-24 12:36:45

Trochę pokrewny Czy wiesz:

Są użyteczne metody w java.util.Collections do tasowania całych kolekcji: Collections.shuffle(List<?>) oraz Collections.shuffle(List<?> list, Random rnd).

 70
Author: chickeninabiscuit,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-28 14:59:46

Szybkie rozwiązanie dla Javy za pomocą ArrayList i HashMap: [element - > index].

Motywacja: potrzebowałem zestawu przedmiotów o właściwościach RandomAccess, szczególnie aby wybrać losowy element z zestawu(patrz metoda pollRandom). Losowa nawigacja w drzewie binarnym nie jest dokładna: drzewa nie są idealnie zrównoważone, co nie prowadziłoby do jednolitego rozkładu.

public class RandomSet<E> extends AbstractSet<E> {

    List<E> dta = new ArrayList<E>();
    Map<E, Integer> idx = new HashMap<E, Integer>();

    public RandomSet() {
    }

    public RandomSet(Collection<E> items) {
        for (E item : items) {
            idx.put(item, dta.size());
            dta.add(item);
        }
    }

    @Override
    public boolean add(E item) {
        if (idx.containsKey(item)) {
            return false;
        }
        idx.put(item, dta.size());
        dta.add(item);
        return true;
    }

    /**
     * Override element at position <code>id</code> with last element.
     * @param id
     */
    public E removeAt(int id) {
        if (id >= dta.size()) {
            return null;
        }
        E res = dta.get(id);
        idx.remove(res);
        E last = dta.remove(dta.size() - 1);
        // skip filling the hole if last is removed
        if (id < dta.size()) {
            idx.put(last, id);
            dta.set(id, last);
        }
        return res;
    }

    @Override
    public boolean remove(Object item) {
        @SuppressWarnings(value = "element-type-mismatch")
        Integer id = idx.get(item);
        if (id == null) {
            return false;
        }
        removeAt(id);
        return true;
    }

    public E get(int i) {
        return dta.get(i);
    }

    public E pollRandom(Random rnd) {
        if (dta.isEmpty()) {
            return null;
        }
        int id = rnd.nextInt(dta.size());
        return removeAt(id);
    }

    @Override
    public int size() {
        return dta.size();
    }

    @Override
    public Iterator<E> iterator() {
        return dta.iterator();
    }
}
 28
Author: fandrew,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-04-14 20:06:48

Jest to szybsze niż pętla for-each w zaakceptowanej odpowiedzi:

int index = rand.nextInt(set.size());
Iterator<Object> iter = set.iterator();
for (int i = 0; i < index; i++) {
    iter.next();
}
return iter.next();

For-each construct wywołuje Iterator.hasNext() w każdej pętli, ale ponieważ index < set.size(), sprawdzenie to jest niepotrzebne. Widziałem 10-20% wzrost prędkości, ale YMMV. (Również kompiluje się bez konieczności dodawania dodatkowej instrukcji return.)

Zauważ, że ten kod (i większość innych odpowiedzi) może być zastosowany do dowolnej kolekcji, a nie tylko zestawu. W postaci metody ogólnej:

public static <E> E choice(Collection<? extends E> coll, Random rand) {
    if (coll.size() == 0) {
        return null; // or throw IAE, if you prefer
    }

    int index = rand.nextInt(coll.size());
    if (coll instanceof List) { // optimization
        return ((List<? extends E>) coll).get(index);
    } else {
        Iterator<? extends E> iter = coll.iterator();
        for (int i = 0; i < index; i++) {
            iter.next();
        }
        return iter.next();
    }
}
 20
Author: Sean Van Gorder,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-11-18 21:44:15

Jeśli chcesz to zrobić w Javie, powinieneś rozważyć skopiowanie elementów do jakiejś kolekcji o dostępie losowym (takiej jak ArrayList). Ponieważ, o ile twój zestaw nie jest mały, dostęp do wybranego elementu będzie kosztowny(O(n) zamiast O (1)). [ed: Kopia listy jest również O (n)]

Alternatywnie możesz poszukać innej implementacji zestawu, która bardziej odpowiada Twoim wymaganiom. ListOrderedSet ze zbiorów Commons wygląda obiecująco.

 15
Author: Dan Dyer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-02-25 17:39:30

W Języku Java:

Set<Integer> set = new LinkedHashSet<Integer>(3);
set.add(1);
set.add(2);
set.add(3);

Random rand = new Random(System.currentTimeMillis());
int[] setArray = (int[]) set.toArray();
for (int i = 0; i < 10; ++i) {
    System.out.println(setArray[rand.nextInt(set.size())]);
}
 8
Author: Jorge Ferreira,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-30 06:06:06
List asList = new ArrayList(mySet);
Collections.shuffle(asList);
return asList.get(0);
 7
Author: Ben Noland,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-12-04 22:18:05

Rozwiązanie Clojure:

(defn pick-random [set] (let [sq (seq set)] (nth sq (rand-int (count sq)))))
 3
Author: pjb3,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-12-23 03:51:32

Perl 5

@hash_keys = (keys %hash);
$rand = int(rand(@hash_keys));
print $hash{$hash_keys[$rand]};
Jest na to jeden sposób.
 2
Author: J.J.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-24 00:51:41

C++. Powinno to być dość szybkie, ponieważ nie wymaga iteracji całego zestawu ani sortowania go. Powinno to działać po wyjęciu z pudełka w przypadku większości nowoczesnych kompilatorów, zakładając, że obsługują one tr1 . Jeśli nie, konieczne może być użycie Boost.

Boost docs są tutaj pomocne, aby to wyjaśnić, nawet jeśli nie używasz Boost.

Sztuką jest wykorzystanie faktu, że dane zostały podzielone na wiadra i szybkie zidentyfikowanie losowo wybranego wiadra (z odpowiednie prawdopodobieństwo).

//#include <boost/unordered_set.hpp>  
//using namespace boost;
#include <tr1/unordered_set>
using namespace std::tr1;
#include <iostream>
#include <stdlib.h>
#include <assert.h>
using namespace std;

int main() {
  unordered_set<int> u;
  u.max_load_factor(40);
  for (int i=0; i<40; i++) {
    u.insert(i);
    cout << ' ' << i;
  }
  cout << endl;
  cout << "Number of buckets: " << u.bucket_count() << endl;

  for(size_t b=0; b<u.bucket_count(); b++)
    cout << "Bucket " << b << " has " << u.bucket_size(b) << " elements. " << endl;

  for(size_t i=0; i<20; i++) {
    size_t x = rand() % u.size();
    cout << "we'll quickly get the " << x << "th item in the unordered set. ";
    size_t b;
    for(b=0; b<u.bucket_count(); b++) {
      if(x < u.bucket_size(b)) {
        break;
      } else
        x -= u.bucket_size(b);
    }
    cout << "it'll be in the " << b << "th bucket at offset " << x << ". ";
    unordered_set<int>::const_local_iterator l = u.begin(b);
    while(x>0) {
      l++;
      assert(l!=u.end(b));
      x--;
    }
    cout << "random item is " << *l << ". ";
    cout << endl;
  }
}
 2
Author: Aaron McDaid,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-07-21 20:11:56

Rozwiązanie powyżej mówi o opóźnieniach, ale nie gwarantuje równego prawdopodobieństwa wybrania każdego indeksu.
Jeśli trzeba to wziąć pod uwagę, spróbuj pobrać próbki zbiornika. http://en.wikipedia.org/wiki/Reservoir_sampling.
Kolekcje.shuffle () (jak sugerują nieliczni) używa jednego takiego algorytmu.

 2
Author: thepace,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-12-08 07:03:09

Ponieważ powiedziałeś "rozwiązania dla innych języków są również mile widziane" ,oto wersja dla Pythona:

>>> import random
>>> random.choice([1,2,3,4,5,6])
3
>>> random.choice([1,2,3,4,5,6])
4
 1
Author: Swaroop C H,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-24 00:15:45

Nie możesz po prostu uzyskać rozmiaru / długości zestawu / tablicy, wygenerować losową liczbę między 0 a rozmiarem / długością, a następnie wywołać element, którego indeks pasuje do tej liczby? HashSet ma .metoda size (), jestem prawie pewien.

W psuedocode-

function randFromSet(target){
 var targetLength:uint = target.length()
 var randomIndex:uint = random(0,targetLength);
 return target[randomIndex];
}
 1
Author: matt lohkamp,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-24 00:18:46

PHP, zakładając, że " set " jest tablicą:

$foo = array("alpha", "bravo", "charlie");
$index = array_rand($foo);
$val = $foo[$index];

Funkcje Mersenne Twister są lepsze, ale nie ma odpowiednika MT array_rand w PHP.

 1
Author: dirtside,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-24 00:19:08

Icon mA typ zbioru i operator elementu losowego, unary "?", więc wyrażenie

? set( [1, 2, 3, 4, 5] )

Da losową liczbę od 1 do 5.

Losowe ziarno jest inicjalizowane na 0, gdy program jest uruchomiony, więc aby uzyskać różne wyniki przy każdym uruchomieniu, użyj randomize()

 1
Author: Hugh Allen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-24 03:03:14

W C #

        Random random = new Random((int)DateTime.Now.Ticks);

        OrderedDictionary od = new OrderedDictionary();

        od.Add("abc", 1);
        od.Add("def", 2);
        od.Add("ghi", 3);
        od.Add("jkl", 4);


        int randomIndex = random.Next(od.Count);

        Console.WriteLine(od[randomIndex]);

        // Can access via index or key value:
        Console.WriteLine(od[1]);
        Console.WriteLine(od["def"]);
 1
Author: Mitch Wheat,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-24 03:32:31

Javascript solution;)

function choose (set) {
    return set[Math.floor(Math.random() * set.length)];
}

var set  = [1, 2, 3, 4], rand = choose (set);

Lub alternatywnie:

Array.prototype.choose = function () {
    return this[Math.floor(Math.random() * this.length)];
};

[1, 2, 3, 4].choose();
 1
Author: Mathew Byrne,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-24 04:23:18

In lisp

(defun pick-random (set)
       (nth (random (length set)) set))
 1
Author: inglesp,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-24 04:28:29

W Matematyce:

a = {1, 2, 3, 4, 5}

a[[ ⌈ Length[a] Random[] ⌉ ]]

Lub, w najnowszych wersjach, po prostu:

RandomChoice[a]

To zostało odrzucone, być może dlatego, że nie ma wyjaśnienia, więc oto jeden z nich:

Random[] generuje pseudorandomowy float z zakresu od 0 do 1. Jest to pomnożone przez długość listy, a następnie funkcja sufitowa jest używana do zaokrąglania do następnej liczby całkowitej. Indeks ten jest następnie wyodrębniany z a.

Ponieważ funkcja tabeli hash jest często wykonywana z regułami w Mathematica, a reguły są przechowywane na listach, można użyć:

a = {"Badger" -> 5, "Bird" -> 1, "Fox" -> 3, "Frog" -> 2, "Wolf" -> 4};
 1
Author: Mr.Wizard,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-04-17 17:25:34

A może po prostu

public static <A> A getRandomElement(Collection<A> c, Random r) {
  return new ArrayList<A>(c).get(r.nextInt(c.size()));
}
 1
Author: Daniel Lubarov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-12-18 21:06:08

Jest to identyczne z akceptowaną odpowiedzią (Khoth), ale z usuniętymi niepotrzebnymi zmiennymi size i i.

    int random = new Random().nextInt(myhashSet.size());
    for(Object obj : myhashSet) {
        if (random-- == 0) {
            return obj;
        }
    }

Chociaż rezygnuje z dwóch wyżej wymienionych zmiennych, powyższe rozwiązanie nadal pozostaje losowe, ponieważ polegamy na losowym (zaczynając od losowo wybranego indeksu), aby zmniejszyć się w kierunku 0 nad każdą iteracją.

 1
Author: Jason Hartley,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-24 22:47:01

Niestety, nie można tego zrobić efektywnie (lepiej niż O (n)) w żadnym ze standardowych kontenerów zestawu bibliotek.

Jest to dziwne, ponieważ bardzo łatwo jest dodać funkcję losowego wyboru do zestawów skrótów, jak również zestawów binarnych. W niezbyt rzadkim zestawie hashowym możesz próbować losowych wpisów, dopóki nie otrzymasz trafienia. Dla drzewa binarnego, możesz wybrać losowo pomiędzy lewym lub prawym poddrzewem, z maksymalną liczbą kroków o (log2). Zaimplementowałem demo poniżej:

import random

class Node:
    def __init__(self, object):
        self.object = object
        self.value = hash(object)
        self.size = 1
        self.a = self.b = None

class RandomSet:
    def __init__(self):
        self.top = None

    def add(self, object):
        """ Add any hashable object to the set.
            Notice: In this simple implementation you shouldn't add two
                    identical items. """
        new = Node(object)
        if not self.top: self.top = new
        else: self._recursiveAdd(self.top, new)
    def _recursiveAdd(self, top, new):
        top.size += 1
        if new.value < top.value:
            if not top.a: top.a = new
            else: self._recursiveAdd(top.a, new)
        else:
            if not top.b: top.b = new
            else: self._recursiveAdd(top.b, new)

    def pickRandom(self):
        """ Pick a random item in O(log2) time.
            Does a maximum of O(log2) calls to random as well. """
        return self._recursivePickRandom(self.top)
    def _recursivePickRandom(self, top):
        r = random.randrange(top.size)
        if r == 0: return top.object
        elif top.a and r <= top.a.size: return self._recursivePickRandom(top.a)
        return self._recursivePickRandom(top.b)

if __name__ == '__main__':
    s = RandomSet()
    for i in [5,3,7,1,4,6,9,2,8,0]:
        s.add(i)

    dists = [0]*10
    for i in xrange(10000):
        dists[s.pickRandom()] += 1
    print dists

I got [995, 975, 971, 995, 1057, 1004, 966, 1052, 984, 1001] jako wyjście, więc dystrybucja szwy dobre.

Sam borykałem się z tym samym problemem i jeszcze nie zdecydowałem, że zwiększenie wydajności tego bardziej wydajnego Picka jest warte kosztów korzystania z kolekcji opartej na Pythonie. Mógłbym oczywiście dopracować i przetłumaczyć na C, ale to dla mnie za dużo pracy:)

 1
Author: Thomas Ahle,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-27 11:30:16

W Javie 8:

static <E> E getRandomSetElement(Set<E> set) {
    return set.stream().skip(new Random().nextInt(set.size())).findFirst().orElse(null);
}
 1
Author: Joshua Bone,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-19 01:15:32

PHP, using MT:

$items_array = array("alpha", "bravo", "charlie");
$last_pos = count($items_array) - 1;
$random_pos = mt_rand(0, $last_pos);
$random_item = $items_array[$random_pos];
 0
Author: da5id,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-24 00:28:40

Dla Zabawy napisałem RandomHashSet na podstawie odrzucania próbkowania. Jest to trochę hakerskie, ponieważ HashMap nie pozwala nam uzyskać dostępu do tabeli bezpośrednio, ale powinno działać dobrze.

Nie używa dodatkowej pamięci, a czas Wyszukiwania jest o(1) amortyzowany. (Ponieważ java HashTable jest gęsta).

class RandomHashSet<V> extends AbstractSet<V> {
    private Map<Object,V> map = new HashMap<>();
    public boolean add(V v) {
        return map.put(new WrapKey<V>(v),v) == null;
    }
    @Override
    public Iterator<V> iterator() {
        return new Iterator<V>() {
            RandKey key = new RandKey();
            @Override public boolean hasNext() {
                return true;
            }
            @Override public V next() {
                while (true) {
                    key.next();
                    V v = map.get(key);
                    if (v != null)
                        return v;
                }
            }
            @Override public void remove() {
                throw new NotImplementedException();
            }
        };
    }
    @Override
    public int size() {
        return map.size();
    }
    static class WrapKey<V> {
        private V v;
        WrapKey(V v) {
            this.v = v;
        }
        @Override public int hashCode() {
            return v.hashCode();
        }
        @Override public boolean equals(Object o) {
            if (o instanceof RandKey)
                return true;
            return v.equals(o);
        }
    }
    static class RandKey {
        private Random rand = new Random();
        int key = rand.nextInt();
        public void next() {
            key = rand.nextInt();
        }
        @Override public int hashCode() {
            return key;
        }
        @Override public boolean equals(Object o) {
            return true;
        }
    }
}
 0
Author: Thomas Ahle,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-12-22 14:05:55

Można również przenieść zestaw do tablicy użyj array prawdopodobnie będzie działać na małą skalę widzę pętlę for W najczęściej głosowanej odpowiedzi jest O (n) anyway

Object[] arr = set.toArray();

int v = (int) arr[rnd.nextInt(arr.length)];
 0
Author: sivi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-11-11 19:43:58

Jeśli naprawdę chcesz wybrać "dowolny" obiekt z Set, bez żadnych gwarancji losowości, najłatwiej jest wziąć pierwszy zwrócony przez iterator.

    Set<Integer> s = ...
    Iterator<Integer> it = s.iterator();
    if(it.hasNext()){
        Integer i = it.next();
        // i is a "random" object from set
    }
 0
Author: Philipp,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-02-04 15:50:10

Najłatwiej w Javie 8 jest:

outbound.stream().skip(n % outbound.size()).findFirst().get()

Gdzie n jest losową liczbą całkowitą. Oczywiście ma mniejszą wydajność niż w przypadku for(elem: Col)

 0
Author: Nicu Marasoiu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-02-24 20:42:58

Ogólne rozwiązanie wykorzystujące odpowiedź Khotha jako punkt wyjścia.

/**
 * @param set a Set in which to look for a random element
 * @param <T> generic type of the Set elements
 * @return a random element in the Set or null if the set is empty
 */
public <T> T randomElement(Set<T> set) {
    int size = set.size();
    int item = random.nextInt(size);
    int i = 0;
    for (T obj : set) {
        if (i == item) {
            return obj;
        }
        i++;
    }
    return null;
}
 0
Author: stivlo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-03-27 10:52:44

Jeśli ustawiony rozmiar nie jest duży, można to zrobić za pomocą tablic.

int random;
HashSet someSet;
<Type>[] randData;
random = new Random(System.currentTimeMillis).nextInt(someSet.size());
randData = someSet.toArray();
<Type> sResult = randData[random];
 0
Author: BHARAT ARYA,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-04 15:10:55