List 飞镖,颤振:射程指数

List 飞镖,颤振:射程指数,list,flutter,dart,range,List,Flutter,Dart,Range,我怎样才能得到一个范围的索引,这个范围是由一个值而不是索引得到的? 例如: ["H", "e", "l", "l", "o"].getRangeIndexes(["e", "l", "l"]); // [1, 3] 试一试 theList.indexOf(subListOfTheList.first) 获取第一个列表中secondlis

我怎样才能得到一个范围的索引,这个范围是由一个值而不是索引得到的? 例如:

["H", "e", "l", "l", "o"].getRangeIndexes(["e", "l", "l"]);
// [1, 3]
试一试

theList.indexOf(subListOfTheList.first)

获取第一个列表中secondlist的第一个元素的索引,第二个列表中的最后一个元素也是如此

theList.indexOf(subListOfTheList.last)

让它成为一种方法

///gives you List of indexes of all the items in smalllist as they appear in biglist,respects the order
List<int> giveBackTheIndexes<T>(List<T> main, List<T> sub) {
  var biglist = main;
  var smalllist = sub;
  final indexes = <int>[];
  smalllist.forEach((smalllistElement) {
    var i = biglist.indexOf(smalllistElement);
    indexes.add(i);
    if(i!=-1){
      biglist[i]=null;
    }
  });
  return indexes;
}
///提供smalllist中所有项在biglist中显示时的索引列表,并遵循顺序
列表返回索引(列表主、列表子){
var biglist=main;
var smalllist=sub;
最终指数=[];
smalllist.forEach((smalllistElement){
var i=biglist.indexOf(smalllistElement);
增加(i);
如果(i!=-1){
biglist[i]=null;
}
});
收益指标;
}

如果值为-1,则biglist中不存在项

您可以编写类似于
getRangeIndexes
的函数,如下所示

void main() {
  List<String> fullStringList = ["H", "e", "l", "l", "o"];
  List<String> subStringList = ["e", "l", "l"];
  print(getRangeIndexes(fullStringList, subStringList)); //<-- prints [1, 3]
}

List<int> getRangeIndexes(List<String> fullList, List<String> subList){
  List<int> rangeIndexes;
  String fullString = fullList.join("");
  String subString = subList.join("");
  if(!fullString.contains(subString)){
    rangeIndexes = [-1, -1];            //return [-1, -1] when it does not contain the same sequence
  }
  else{
    int startIndex = fullString.indexOf(subString);
    int endIndex = startIndex + (subString.length - 1);
    rangeIndexes = [startIndex, endIndex];
  }
  return rangeIndexes;
}
void main(){
List fullStringList=[“H”、“e”、“l”、“l”、“o”];
列表子字符串列表=[“e”、“l”、“l”];

打印(getRangeIndexes(fullStringList,subStringList));//非常感谢!是的,它对我很有效,但在某些情况下可能不起作用,比如什么?上面的方法可以缓解你的问题。我认为OP在问题中所给出的例子就是错误的。在所有这些方法中,它总是将
2
作为
l
的索引,因为
indexOf
返回第一次出现的索引。而它应该是
3
。因为我们需要第二次
l
的索引,即
3
,而不是
2
。对于相同的示例,此修改的方法返回
{e:-1,l:-1}
。这不对吗?