Flutter 如何将编码为 SQFL 数据库的字符串的列表简洁地转换回列表?
Flutter how to turn Lists encoded as Strings for a SQFL database back to Lists concisely?
恐怕我正在尝试在这里重新发明轮子。我将对象放入我的 SQFL 数据库中:
https://pub.dev/packages/sqflite
一些对象字段是整数列表,其他是字符串列表。我将这些编码为纯字符串,以放置在我的 SQFL 数据库中的文本字段中。
在某些时候我将不得不把它们转回去,我在 Google 上找不到任何东西,这很令人惊讶,因为这在 SQFL
中一定很常见
我已经开始编写 'decoding',但它是新手飞镖。有什么我应该使用的高性能产品吗?
包含代码以证明我不是完全懒惰,无需查看,边缘情况会导致失败。
List<int> listOfInts = new List<int>();
String testStringOfInts = "[1,2,4]";
List<String> intermediateStep2 = testStringOfInts.split(',');
int numListElements = intermediateStep2.length;
print("intermediateStep2: $intermediateStep2, numListElements: $numListElements");
for (int i = 0; i < numListElements; i++) {
if (i == 0) {
listOfInts.add(int.parse(intermediateStep2[i].substring(1)));
continue;
}
else if ((i) == (numListElements - 1)) {
print('final element: ${intermediateStep2[i]}');
listOfInts.add(int.parse(intermediateStep2[i].substring(0, intermediateStep2[i].length - 1)));
continue;
}
else listOfInts.add(int.parse(intermediateStep2[i]));
}
print('Output: $listOfInts');
/* DECODING LISTS OF STRINGS */
String testString = "['element1','element2','element23']";
List<String> intermediateStep = testString.split("'");
List<String> output = new List<String>();
for (int i = 0; i < intermediateStep.length; i++) {
if (i % 2 == 0) {
continue;
} else {
print('adding a value to output: ${intermediateStep[i]}');
//print('value is a: ${(intermediateStep[i]).runtimeType}');
output.add(intermediateStep[i]);
}
}
print('Output: $output');
}
对于整数,您可以像这样进行解析:
void main() {
print(parseStringAsIntList("[1,2,4]")); // [1, 2, 4]
}
List<int> parseStringAsIntList(String stringOfInts) => stringOfInts
.substring(1, stringOfInts.length - 1)
.split(',')
.map(int.parse)
.toList();
我需要更多关于字符串在某些极端情况下如何保存的信息,比如它们是否包含 ,
and/or '
,因为这将改变解析的方式。但是,如果字符串中的两个字符都有效(尤其是 ,
),我会建议您将存储格式更改为 JSON,这样可以更轻松地 encode/decode 并且没有风险使用会给您带来问题的字符)。
但是如果我们知道每个字符串不包含 ,
:
void main() {
print(parseStringAsStringList("['element1','element2','element23']"));
// [element1, element2, element23]
}
List<String> parseStringAsStringList(String stringOfStrings) => stringOfStrings
.substring(1, stringOfStrings.length - 1)
.split(',')
.map((string) => string.substring(1, string.length - 1))
.toList();
恐怕我正在尝试在这里重新发明轮子。我将对象放入我的 SQFL 数据库中: https://pub.dev/packages/sqflite
一些对象字段是整数列表,其他是字符串列表。我将这些编码为纯字符串,以放置在我的 SQFL 数据库中的文本字段中。
在某些时候我将不得不把它们转回去,我在 Google 上找不到任何东西,这很令人惊讶,因为这在 SQFL
中一定很常见我已经开始编写 'decoding',但它是新手飞镖。有什么我应该使用的高性能产品吗?
包含代码以证明我不是完全懒惰,无需查看,边缘情况会导致失败。
List<int> listOfInts = new List<int>();
String testStringOfInts = "[1,2,4]";
List<String> intermediateStep2 = testStringOfInts.split(',');
int numListElements = intermediateStep2.length;
print("intermediateStep2: $intermediateStep2, numListElements: $numListElements");
for (int i = 0; i < numListElements; i++) {
if (i == 0) {
listOfInts.add(int.parse(intermediateStep2[i].substring(1)));
continue;
}
else if ((i) == (numListElements - 1)) {
print('final element: ${intermediateStep2[i]}');
listOfInts.add(int.parse(intermediateStep2[i].substring(0, intermediateStep2[i].length - 1)));
continue;
}
else listOfInts.add(int.parse(intermediateStep2[i]));
}
print('Output: $listOfInts');
/* DECODING LISTS OF STRINGS */
String testString = "['element1','element2','element23']";
List<String> intermediateStep = testString.split("'");
List<String> output = new List<String>();
for (int i = 0; i < intermediateStep.length; i++) {
if (i % 2 == 0) {
continue;
} else {
print('adding a value to output: ${intermediateStep[i]}');
//print('value is a: ${(intermediateStep[i]).runtimeType}');
output.add(intermediateStep[i]);
}
}
print('Output: $output');
}
对于整数,您可以像这样进行解析:
void main() {
print(parseStringAsIntList("[1,2,4]")); // [1, 2, 4]
}
List<int> parseStringAsIntList(String stringOfInts) => stringOfInts
.substring(1, stringOfInts.length - 1)
.split(',')
.map(int.parse)
.toList();
我需要更多关于字符串在某些极端情况下如何保存的信息,比如它们是否包含 ,
and/or '
,因为这将改变解析的方式。但是,如果字符串中的两个字符都有效(尤其是 ,
),我会建议您将存储格式更改为 JSON,这样可以更轻松地 encode/decode 并且没有风险使用会给您带来问题的字符)。
但是如果我们知道每个字符串不包含 ,
:
void main() {
print(parseStringAsStringList("['element1','element2','element23']"));
// [element1, element2, element23]
}
List<String> parseStringAsStringList(String stringOfStrings) => stringOfStrings
.substring(1, stringOfStrings.length - 1)
.split(',')
.map((string) => string.substring(1, string.length - 1))
.toList();