Arrays 在空列表省道中的特定索引处插入值

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。。。。所

我想在空列表dart中的特定索引处添加元素,如下所示

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))