如何在 Dart/Flutter 中找到从一个列表匹配到另一个列表的所有元素的索引

How to find the indices of all elements matching from one list to another in Dart/Flutter

假设,我有一个列表:firstList = ["Travel", "Shopping", "Transport"];

另一个列表:secondList = ["Travel", "Shopping", "Shopping", "Travel", "Transport", "Transport", "Travel", "Travel"]

我需要从包含以下内容的 secondList 中找到所有元素的索引:"Travel"

secondList "Travel" 出现在 索引 0、3、6 和 7

现在,我有一个包含元素索引的第三个列表,这里是 "Travel"

indexList = [0, 3, 6, 7] // 因为索引 0、3、6 和 7 只包含元素 "Travel".

下面是我的程序:

for (int i = 0; i < firstList.length; i++) {
    for (int j = 0; j < secondList.length; j++) {
           
      indexList.add(secondList.indexOf(firstList[i]));

         }
    } 

这不起作用,因为我得到这样的输出:

[0, 0, 0, 0, 0, 0, 0, 0, 0]

它似乎卡在了第一个索引上。

“旅行”,这里是一个例子,它应该是动态匹配的,比如 firstList[i] 或任何其他元素,而不仅仅是硬编码的“旅行”。比如如果我选择了 firstList[i] 然后在 secondList[].

中找到相同元素的索引

请帮我找出原因。 我是编程新手。

试试这个:

main() {
  var firstList = ["Travel", "Shopping", "Transport"];
  var secondList = [
    "Travel",
    "Shopping",
    "Shopping",
    "Travel",
    "Transport",
    "Transport",
    "Travel",
    "Travel"
  ];
  var thirdList = [];
  for (var i = 0; i < secondList.length; i++) {
    if (secondList[i] == "Travel") {
      thirdList.add(i);
    }
  }
  print(thirdList);
}

编辑:它适用于 firstList

中的每个项目

试试这个:

main() {
  var firstList = ["Travel", "Shopping", "Transport"];
  var secondList = [
    "Travel",
    "Shopping",
    "Shopping",
    "Travel",
    "Transport",
    "Transport",
    "Travel",
    "Travel"
  ];
  var thirdList = [];
  for (var i = 0; i < firstList.length; i++) {
    var sublist = [];
    for (var j = 0; j < secondList.length; j++) {
      if (secondList[j] == firstList[i]) {
        sublist.add(j);
      }
    }
    thirdList.add(sublist);
  }
  print(thirdList); // [[0, 3, 6, 7], [1, 2], [4, 5]]
}

我们可以用一个循环来实现。

试试这个

  for (int j = 0; j < secondList.length; j++) {
    if (secondList[j] == 'Travel') indexList.add(j);
  }
  List firstList = ["Travel", "Shopping", "Transport"];
  List secondList = ["Travel", "Shopping", "Shopping", "Travel", "Transport", "Transport", "Travel", "Travel"];
  List indexList = [];

  getElement() {
    for (int i = 0; i <= secondList.length; i++) {
      if (secondList[i] == "Travel") {
        indexList.add(i);
      }
    }

    print(indexList);
  }
 void matchItem()
  {
    var firstList = ["Travel", "Shopping", "Transport"];
    var secondList = ["Travel", "Shopping", "Shopping", "Travel", "Transport", "Transport", "Travel", "Travel"];
    var foundItemPositions = [];
    for(int i=0;i<firstList.length;i++)
      {
        if(secondList.contains(firstList[i]))
          {
            for(int j=0;j<secondList.length;j++)
              {
                if(firstList[i] == secondList[j])
                  {
                    foundItemPositions.add(j);
                  }
              }
          }
      }
    print(foundItemPositions);
  }