void main(List<String> arguments) {
final items = ['1', '2', '3', '1', '2', '4', '3', '1', '3'];
var accum = <String>[];
final result = <List<String>>[];
for (final item in items) {
print(item);
switch (item) {
case '1':
if (accum.isNotEmpty) {
throw Exception('accum is not empty $accum but saw 1');
}
accum.add(item);
case '3':
if (accum.isEmpty) {
throw Exception('accum is empty but saw 3');
}
accum.add(item);
result.add(accum);
accum = [];
default:
if (accum.isEmpty) {
throw Exception('accum is empty but saw $item, not 1');
}
accum.add(item);
}
}
if (accum.isNotEmpty) {
throw Exception('accum is not empty but saw $accum');
}
print(result);
}
4条答案
按热度按时间insrf1ej1#
一个简单的方法是
编辑:
我在第一次回答后就知道了
splitBetween
。这将使它更加简洁:这确实需要
collection
包,因此您还需要3gtaxfhh2#
你可以像这样浏览你的列表:
初始化
listOfLists
以存储子列表。遍历原始列表项:当遇到“1”时,将startIndex
设置为当前索引。当遇到“3”时,将endIndex
设置为当前索引。如果在找到“3”之前再次找到“1”,则意味着新的子列表已经启动,因此将前一个子列表添加到listOfLists
。最后,如果最后一个子列表以“3”结尾,则添加它。gpnt7bae3#
我根据猜测添加了几个测试:
rjee0c154#
你也可以使用sublist()方法来创建整个列表的子列表,从某个索引开始:
List number = [1,2,3,4,5]; List sublist = numbers.sublist(2);
print();// [3,4,5]