是什么让它成为Dart中的固定长度列表?

时间:2016-11-28 16:30:32

标签: algorithm list dart

 List<String> checkLength(List<String> input) {
  if (input.length > 6) {
    var tempOutput = input;
    while (tempOutput.length > 6) {
      var difference = (tempOutput.length/6).round() + 1;
      for (int i = 0; i < tempOutput.length - 1; i + difference) {
        tempOutput.removeAt(i); //Removing the value from the list
      }
    }
    return tempOutput; //Return Updated list
  } else {
    return input;
  }
}

我正在尝试从临时列表中删除某些内容。为什么不起作用?我没有看到它是如何修复的,在我解决的其他问题中,我使用了类似的方法并且它起作用(甚至相同)

请注意我对Dart有点新意,所以请原谅我这样的问题,但我无法找到解决方案。

查找Dart Link中提供的代码

Code in Dart

3 个答案:

答案 0 :(得分:13)

您可以通过将tempOutput初始化为

来确保var tempOutput = new List<String>.from(input); 不是固定长度列表

tempOutput

从而声明inputi + difference的可变副本。

仅供您参考,因为您在for循环更新步骤中执行了i += difference,但您的计划中还有另一个错误,但我认为您需要<xsl:element name="{local-name()}">

答案 1 :(得分:0)

请您尝试使用此代码,让我知道这有效吗?

List<String> checkLength(List<String> input) {
  if (input.length > 6) {
    var tempOutput = input;
    while (tempOutput.length > 6) {
      var difference = (tempOutput.length/6).round() + 1;
      for (int i = 0; i < tempOutput.length - 1; i = i + difference) {
        tempOutput.removeAt(i); //Removing the value from the list
      }
    }
    return tempOutput.toList(); //Return Updated list
  } else {
    return input.toList();
  }
}

注意:您使用了“i + difference”,它是相同的值,例如在第一次迭代中你i = 1且差值= 1,那么“tempOutput.removeAt(i)”将删除“1”位置的值,再次在第二次迭代中,您试图删除相同的位置,因此错误明确指出“无法从固定长度中删除”

这里的i值必须在每个迭代过程中递增或递减,在你缺少的for循环中。

答案 2 :(得分:0)

@ harry-terkelsen的答案对于解决固定长度问题非常有帮助。

对于那些询问我的算法的人: 不同之处在于想要删除某些字符时跳过字符数量。此外,我不得不改变for循环,因为它并没有完全按照我想要的方式进行。

修复就在这里! https://github.com/luki/wordtocolor/blob/master/web/algorithms.dart

感谢您理解我!