0

When i have list

[1, 2, 3, 4, 5, 6, 7]

i want to get 3 random elements from list

e.g

[1, 3, 4] or [4, 5, 1] or [3, 2, 5]

how can i solve that simply

is there any dart library??

0

2 Answers 2

4

The previous solution is good but could have been written in a more generic way so we don't loose the type information of the List. Also, take does not return a List but instead Iterable.

I have rewritten the code to be more generic and shorter by using the cascade operator. I am not sure if you want a List or Iterable as output so I have made multiple solutions:

void main() {
  final items = [1, 2, 3, 4, 5, 6, 7];

  print(pickRandomItems(items, 3));                  // (7, 4, 3)
  print(pickRandomItemsAsList(items, 3));            // [2, 4, 5]
  print(pickRandomItemsAsListWithSubList(items, 3)); // [1, 3, 6]
  print(items); // [1, 2, 3, 4, 5, 6, 7] (just to show that the original List is untouched)
}

Iterable<T> pickRandomItems<T>(List<T> items, int count) =>
    (items.toList()..shuffle()).take(count);

List<T> pickRandomItemsAsList<T>(List<T> items, int count) =>
    (items.toList()..shuffle()).take(count).toList();

List<T> pickRandomItemsAsListWithSubList<T>(List<T> items, int count) =>
    (items.toList()..shuffle()).sublist(0, count);

Instead of using take in pickRandomItemsAsList you can instead use sublist. But the catch with subList is that if the length are greater than the List it will give an error but with take you just get all the elements in the List shuffled.

Sign up to request clarification or add additional context in comments.

Comments

2

Simply shuffle list and take sublist (slice):

  List pickRandomItems(List items, int count) {
    final list = List.from(items); // cloning original list
    list.shuffle();                // shuffling items
    return list.take(count);       // taking N items
  }

  List items = [1, 2, 3, 4, 5, 6, 7];
  print(pickRandomItems(items, 3));

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.