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中提供的代码
答案 0 :(得分:13)
您可以通过将tempOutput
初始化为
var tempOutput = new List<String>.from(input);
不是固定长度列表
tempOutput
从而声明input
是i + 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
感谢您理解我!