Arrays 在空列表省道中的特定索引处插入值
我想在空列表dart中的特定索引处添加元素,如下所示Arrays 在空列表省道中的特定索引处插入值,arrays,list,dart,Arrays,List,Dart,我想在空列表dart中的特定索引处添加元素,如下所示 List values = List(); values[87] = {'value': 'hello'}; 当我试着运行这段代码时,它显示了这个错误 Unhandled Exception: RangeError (index): Invalid value: Valid value range is empty: 87 解决方案是设置列表长度列表值=列表(100)但问题是我不知道长度,因为索引是id,它可以是87或1523。。。。所
List values = List();
values[87] = {'value': 'hello'};
当我试着运行这段代码时,它显示了这个错误
Unhandled Exception: RangeError (index): Invalid value: Valid value range is empty: 87
解决方案是设置列表长度<代码>列表值=列表(100)代码>但问题是我不知道长度,因为索引是id,它可以是87或1523。。。。所以我不能设定长度
另一种解决方案是使用final sparseList=SplayTreeMap()代码>
并插入元素sparseList[87]={'value':'hello'}代码>
SplayTreeMap的问题是我不能对这种类型的列表执行jsonencode或json.encode,它会显示以下错误消息
Unhandled Exception: Converting object to an encodable object failed: Instance of 'SplayTreeMap<int, dynamic>'
未处理的异常:将对象转换为可编码对象失败:“SplayTreeMap”的实例
问题:
1-如何在dart中的空列表中的特定索引处设置元素
2-如何对SplayTreeMap列表进行json编码以将其发送到服务器的php文件
谢谢
我想在空列表dart中的特定索引处添加元素,如下所示
List values = List();
values[87] = {'value': 'hello'};
一种方法是添加一个方便的函数,在必要时将伪元素附加到列表中
列表上的扩展列表填充程序{
void fillAndSet(int索引,T值){
如果(索引>=此.length){
this.addAll(List.filled(index-this.length+1,null));
}
此[索引]=值;
}
}
void main(){
var列表=[];
列表。fillAndSet(3,“世界”);
fillAndSet(2,'hello');
打印(列表);//打印:[null,null,hello,world]
}
SplayTreeMap的问题是我不能将jsonencode或json.encode添加到这种类型的列表中
各国(加上重点):
如果值包含不可直接编码为JSON字符串的对象(不是数字、布尔值、字符串、null、列表或带有字符串键的映射的值)
因此,jsonecode
对于SplayTreeMap
失败的原因不是因为它是SplayTreeMap
而不是Map
/LinkedHashMap
,而是因为您的键不是String
s。(jsonecode
在SplayTreeMap
上应该可以工作。)编码时可以转换SplayTreeMap
:
final sparseList=SplayTreeMap();
...
var encoded=jsonEncode({
for(sparseList.entries中的var mapEntry)
mapEntry.key.toString():mapEntry.value,
});
谢谢,您使用SplayTreeMap的解决方案运行良好,非常好。在这种情况下,您真的需要列表吗?我不知道您的完整代码,但映射应该更适合此上下文,然后您可以用如下方式对映射进行编码:json.encode(myMap.Map((key,value)=>MapEntry(key.toString(),value))