Coder Social home page Coder Social logo

enchanted_collection's Introduction

<style> .heading-1{ font-size: 360%!important; } </style>

Enchanted collection toolkit

A collection of useful data structures and algorithms for collections.

🗂️ Summary

List util's

For each mapper

A for each function with aditional info in each interation. Such as:

  • Is the first interation? isFirst
  • Is the last interation? isLast
  • The index of the current interation index
  • The value of the current interation value
final forEachMapperExample = [1, 2, 3];
forEachMapperExample.forEachMapper((value, isFirst, isLast, index) {
  print('value: $value');
  print('isFirst: $isFirst');
  print('isLast: $isLast');
  print('index: $index');
});

Mapper

A map function with aditional info in each interation.

Such as:

  • Is the first interation? isFirst
  • Is the last interation? isLast
  • The index of the current interation index
  • The value of the current interation value

Returns a list of the mapped values.

final mapperExample = ['igor', 'miranda', 'souza'];
final List<Map<int, String>> mappedList = mapperExample.mapper((
  value,
  isFirst,
  isLast,
  index,
) {
  if (isFirst || isLast) {
    return {index: value.toUpperCase()};
  }
  return {index: value};
});
print(mappedList); // [{0: "IGOR"}, {1: "miranda"}, {2: "SOUZA"}]

Single where or null

Equal to singleWhere but will not throw a error if element dosen't exist's. But will return null instead.

final List<int> singleWhereOrNullList = [1, 2, 3];
// Will return null:
print(singleWhereOrNullList.singleWhereOrNull((e) => e == 4));
// Will return 3:
print(singleWhereOrNullList.singleWhereOrNull((e) => e == 3));

Insert in index

Will add [newValue] in the list in the position of [index].

Equal to [List.insert] function. But will return the list itself with the added value. So you can cascade it.

final insertInIndexExample = [1, 2, 4];
insertInIndexExample.insertInIndex(1, 3);
print(insertInIndexExample); // [1, 2, 3, 4]

Change element in index

Will change the value in the index position to newValue.

final changeListExample = [1, 2, 3];
changeListExample // cascade notation
    .changeAtIndexTo(0, 4)
    .changeAtIndexTo(1, 5)
    .changeAtIndexTo(2, 6);
print(changeListExample); // [4, 5, 6]

Add value as last element of list

Will add [newValue] in the last position of the list.

Equal to [List.add] function. But will return the list itself with the added value. So you can cascade it.

final addInLastExample = [1, 2, 3];
addInLastExample // cascade notation
    .addInLast(4)
    .addInLast(5)
    .addInLast(6);
print(addInLastExample); // [1, 2, 3, 4, 5, 6]

Split into groups

Will split the list into groups of quantityPerGroup elements.

The last group may have less elements than quantityPerGroup.

final splitIntoGroupsExample = [1, 2, 3, 4, 5, 6, 7];
final List<List<int>> groups = splitIntoGroupsExample.splitIntoGroups(3);
print(groups); // [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7 ] ]

Is any element diferent from null AND is any element null

final withNullList = [1, 2, 3, null];
final withoutNullList = [1, 2, 3];

print(withNullList.isAnyElementDiffFromNull); // true
print(withoutNullList.isAnyElementDiffFromNull); // true

Remove null elements of a list

final withNullList = [1, 2, 3, null];
print(withNullList.removeNull); // [1, 2, 3]

Integer util's

bool isBiggerThen(int valueToBeCompared)

Will return true if the value is bigger then [valueToBeCompared].

bool isBiggerOrEqualThen(int valueToBeCompared)

Will return true if the value is bigger or equal then [valueToBeCompared].

bool isSmallerThen(int valueToBeCompared)

Will return true if the value is smaller then [valueToBeCompared].

bool isSmallerOrEqualThen(int valueToBeCompared)

Will return true if the value is smaller or equal then [valueToBeCompared].

Example of thoose 4 compare functions:

final isBiggerThenTest = 4.isBiggerThen(6); // false
final isBiggerOrEqualThenTest = 4.isBiggerOrEqualThen(4); // true 
final isSmallerThenTest = 4.isSmallerThen(6); // true
final isSmallerOrEqualThenTest = 4.isSmallerOrEqualThen(4); // true

Map util's

Try cast map

Try to decode a json string into a map. If the string is not a valid json, will return null.

Is just a boilerplate to avoid try/catch blocks. Basically, this:

try {
  return jsonDecode(this);
} catch (_) {
  return null;
}

Example:

final String invalidJson = 'invalid json';
final String validJson = '{"name": "igor"}';
print(invalidJson.tryDecode); // null
print(validJson.tryDecode); // {"name": "igor"}

Cast functions

Transform a list into a map

Will cast a list into a map. For each element in the list, will call the onElementToKey and onElementToValue functions.

Example:

final list = [
  {
    'name': 'igor',
    'age': 23
  },
  {
    'name': 'miranda',
    'age': 30
  },
];
final Map<String, int> persons = list.castToMap(
  (element) {
    return element['name'] as String;
  },
  (element) {
    return element['age'] as int;
  },
);

persons map will be:

{
  "igor": 23,
  "miranda": 30
}

Transform a list into a map with mapper

Check castToMap documentation for base info about this function. That because this function is basically a castToMap but with more info in each interation, such as:

  • Is the first interation? isFirst
  • Is the last interation? isLast
  • The index of the current interation index
  • The value of the current interation value

Transform a map into a list

For each Map entry, will map it to the return type with toElementFunc function and each return will be a element in the List.

final Map<String, int> personsMap = {
  "Igor": 23,
  "Miranda": 30,
};
final List<String> personsList = personsMap.castToList(
  (key, value) {
    return 'My name is $key, and I have $value years old.';
  },
);
print(personsList);

Cast object/dynamic to desired type

Cast value to type [R]. Basically, a shortcut to this as R:

final dynamic dynamicList = 3;
final int intList = dynamicList.as<int>();
print(intList); // 3

Made with ❤ by Igor Miranda
If you like the package, give a 👍

enchanted_collection's People

Contributors

igormidev avatar

Stargazers

 avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.