Combining multiple items by condition within a single list

As in Dart you can combine several list items into one according to the following condition:

Given List<String> arr = ['2','3','b','*','4','5','6','-','3','4'];

Get arr = ['23','b','*','456','-','34'];

The list is unknown in advance. It can be of any length and with any sequence of characters. And need to combine only the lines that have numbers in them.

I would be grateful for any suggestions.

Upvotes: 0

Views: 912

Answers (2)

julemand101
julemand101

Reputation: 31219

You are not describing what should happen if there are multiple special characters or letters. So I have made my example so it will only combine numbers:

void main() {
  final arr = ['2', '3', 'b', '*', '4', '5', '6', '-', '3', '4'];
  print(combine(arr)); // [23, b, *, 456, -, 34]
}

List<String> combine(List<String> input) {
  final output = <String>[];
  final buffer = StringBuffer();

  for (final string in input) {
    if (int.tryParse(string) == null) {
      if (buffer.isNotEmpty) {
        output.add(buffer.toString());
        buffer.clear();
      }
      output.add(string);
    } else {
      buffer.write(string);
    }
  }

  if (buffer.isNotEmpty) {
    output.add(buffer.toString());
  }

  return output;
}

Upvotes: 1

Ali Kazmi
Ali Kazmi

Reputation: 21

You can use ''.join() here:

arr = [''.join(arr[0:2]), arr[2], arr[3], ''.join(arr[4:7]), arr[7], ''.join(arr[8:10])]

If you only want to have a condition where you only join numerical values then you can add a for loop beforehand.

Upvotes: 0

Related Questions