如何在Dart中创建自定义索引的列表及多维数组?
嘿,我来帮你解决这两个Dart里的问题!
1. 如何在Dart中创建带有用户自定义索引值的列表?
首先得明确一点:Dart里的List(列表)的索引是固定从0开始的连续整数,没办法直接自定义索引值(比如让第一个元素的索引是5,第二个是10这种)。如果需要自定义索引(不管是整数还是其他类型),咱们应该用Map来实现,它可以把自定义的“索引”(也就是键)和对应的值关联起来。
举个例子,如果你想创建一个以自定义整数为索引的集合:
// 定义一个键为int类型,值为String类型的Map var customIndexedCollection = <int, String>{}; // 添加自定义索引的元素 customIndexedCollection[5] = "第一个元素"; customIndexedCollection[10] = "第二个元素"; customIndexedCollection[3] = "第三个元素"; // 访问元素 print(customIndexedCollection[5]); // 输出:第一个元素
如果你的“自定义索引”需要保持插入顺序,也可以用LinkedHashMap,它会严格保留元素添加的顺序:
import 'dart:collection'; var orderedCustomCollection = LinkedHashMap<int, String>(); orderedCustomCollection[5] = "first"; orderedCustomCollection[3] = "second"; orderedCustomCollection[10] = "third"; // 遍历的时候会按插入顺序输出 orderedCustomCollection.forEach((key, value) => print("$key: $value")); // 输出: // 5: first // 3: second // 10: third
当然,如果只是想让展示给用户的“逻辑索引”从非0值开始(比如对外说索引从1开始,但内部还是用List的0索引),那直接用普通List,访问的时候做个偏移就行,比如list[index - 1]。
2. 创建带有自定义外层索引的多维数组
你描述的需求是外层索引为自定义值(不是0、1),内层是普通列表(索引0、1),这种场景同样适合用Map嵌套List来实现。
直接上代码示例:
// 定义外层为自定义int索引,内层为List的Map var multiDimensionalMap = <int, List<dynamic>>{}; // 先初始化自定义索引对应的内层列表(不初始化直接赋值会报错) multiDimensionalMap[10] = List.filled(2, null); // 内层列表长度为2,初始值设为null multiDimensionalMap[20] = List.filled(2, null); // 按需求赋值 multiDimensionalMap[10][0] = "value1"; multiDimensionalMap[20][1] = "value2"; // 访问元素 print(multiDimensionalMap[10][0]); // 输出:value1 print(multiDimensionalMap[20][1]); // 输出:value2
如果不想提前初始化内层列表,也可以在赋值时动态创建:
var multiDimensionalMap = <int, List<dynamic>>{}; // 当键不存在时,自动创建空列表 multiDimensionalMap[15] ??= []; multiDimensionalMap[15].add("test value"); // 也可以直接创建指定长度的列表后赋值 multiDimensionalMap[25] = [null, null]; multiDimensionalMap[25][1] = "another value";
这样就能完美实现你需要的arr[index1][0]=value1; arr[index2][1]=value2的效果,其中index1、index2可以是任何你需要的自定义整数。
内容的提问来源于stack exchange,提问作者shubham mishra
相关产品推荐
相关产品推荐

