FLUTTER - 列表构造函数和空安全模式的问题
FLUTTER - Problem with List constructor and null safety mode
我想使用这个“Levenshtein”函数来评估两个字符串之间的相似性(检查用户是否犯了拼写错误)。
由于我在空安全模式下工作,它指出了 LIST 构造函数的错误:
List<List<int>> d = List.generate(sa + 1, (int i) => List(sb + 1));
我可以写什么来代替 List(sb+1));
?
int levenshtein(String a, String b) {
a = a.toUpperCase();
b = b.toUpperCase();
int sa = a.length;
int sb = b.length;
int i, j, cost, min1, min2, min3;
int levenshtein;
// ignore: deprecated_member_use
List<List<int>> d = List.generate(sa + 1, (int i) => List(sb + 1));
if (a.length == 0) {
levenshtein = b.length;
return (levenshtein);
}
if (b.length == 0) {
levenshtein = a.length;
return (levenshtein);
}
for (i = 0; i <= sa; i++) d[i][0] = i;
for (j = 0; j <= sb; j++) d[0][j] = j;
for (i = 1; i <= a.length; i++)
for (j = 1; j <= b.length; j++) {
if (a[i - 1] == b[j - 1])
cost = 0;
else
cost = 1;
min1 = (d[i - 1][j] + 1);
min2 = (d[i][j - 1] + 1);
min3 = (d[i - 1][j - 1] + cost);
d[i][j] = min(min1, min(min2, min3));
}
levenshtein = d[a.length][b.length];
return (levenshtein);
}
您也可以对内部列表使用 List.generate
。
List<List<int>> d = List.generate(sa + 1, (int i) => List.generate(sb + 1, (int j) => 0));
此外,如果它们都将被初始化为 0,您也可以这样做:
List<List<int>> d = List.filled(sa + 1, List.filled(sb + 1, 0));
我想使用这个“Levenshtein”函数来评估两个字符串之间的相似性(检查用户是否犯了拼写错误)。
由于我在空安全模式下工作,它指出了 LIST 构造函数的错误:
List<List<int>> d = List.generate(sa + 1, (int i) => List(sb + 1));
我可以写什么来代替 List(sb+1));
?
int levenshtein(String a, String b) {
a = a.toUpperCase();
b = b.toUpperCase();
int sa = a.length;
int sb = b.length;
int i, j, cost, min1, min2, min3;
int levenshtein;
// ignore: deprecated_member_use
List<List<int>> d = List.generate(sa + 1, (int i) => List(sb + 1));
if (a.length == 0) {
levenshtein = b.length;
return (levenshtein);
}
if (b.length == 0) {
levenshtein = a.length;
return (levenshtein);
}
for (i = 0; i <= sa; i++) d[i][0] = i;
for (j = 0; j <= sb; j++) d[0][j] = j;
for (i = 1; i <= a.length; i++)
for (j = 1; j <= b.length; j++) {
if (a[i - 1] == b[j - 1])
cost = 0;
else
cost = 1;
min1 = (d[i - 1][j] + 1);
min2 = (d[i][j - 1] + 1);
min3 = (d[i - 1][j - 1] + cost);
d[i][j] = min(min1, min(min2, min3));
}
levenshtein = d[a.length][b.length];
return (levenshtein);
}
您也可以对内部列表使用 List.generate
。
List<List<int>> d = List.generate(sa + 1, (int i) => List.generate(sb + 1, (int j) => 0));
此外,如果它们都将被初始化为 0,您也可以这样做:
List<List<int>> d = List.filled(sa + 1, List.filled(sb + 1, 0));