dart中setRange详解
大家好!我是猪哥,很久没更新教程了,这次疫情非常严重猪哥也羊了,休养了很久才恢复过来!首先祝大家新年快乐!今天猪哥在研究dart,发现很多教程对于 setRange这个方法讲解的不够透彻,今天猪哥来讲解下这个方法的使用!setRange(start,end,[]) 这个函数 是dart数组中 范围替换的一个函数 它有3个参数,第一个是sart 索引位置,第二个结束的索引位置,第三个要替换成的数组元素! 如果你学过其他语言 发现 它替换后并不是你想象的结果,我们先放个小案例看下
List<String> l1 = ['香蕉', '苹果', '西瓜', '梨子', '葡萄']; List<String> l2 = ['芒果', '橙子', '榴莲']; l1.setRange(0, 1, l2);
结果是:
[Running] dart "d:\dartProject\demo02\List数组.-01.dart"
[芒果, 苹果, 西瓜, 梨子, 葡萄]
我们可以看到这个是按照其他语言正常截取替换的,从数组 l1 的起始位置0 开始 到 1结束 注意 它是不包括1 的 ,只能 是 0~1 之间的元素 也就是只能是香蕉,按照正常逻辑 我们可能是想象的是
['芒果', '橙子', '榴莲','苹果', '西瓜', '梨子', '葡萄']; 可能这样 但是结果是 [芒果, 苹果, 西瓜, 梨子, 葡萄] 非常奇怪 和其他语言不太一样
下面我们吧上面的例子修改下
List<String> l1 = ['香蕉', '苹果', '西瓜', '梨子', '葡萄']; List<String> l2 = ['芒果', '橙子', '榴莲','蓝莓']; l1.setRange(1, 4, l2);
[Running] dart "d:\dartProject\demo02\List数组.-01.dart"
[香蕉, 芒果, 橙子, 榴莲, 葡萄]
我们这次 截取位置l1 的 1 开始 到 4 结束 我们根据上面的验证已经得知 需要把 l1 索引1 苹果 到 索引4 葡萄 之间的元素替换掉,注意 是不包括索引4葡萄的 也就是 把 苹果 西瓜 梨子替换掉
数据来源
List<String> l2 = ['芒果', '橙子', '榴莲']; 这个数组中获取
下面这个是重点,我们可以看出l1 数组被替换了3个元素,
其他语言可能是把1-4之间的元素替换成
['芒果', '橙子', '榴莲']
但是在dart中 这个替换的结果是和 上面有些出入的,即l1 数组被替换了3个元素,那么替换的结果只能是3个
List<String> l2 = ['芒果', '橙子', '榴莲','蓝莓'];
所以 它只会在 l2 数组中取 对应的3个元素
['芒果', '橙子', '榴莲']; 而不会包括蓝莓
最后总结下:setRange 这个函数 第一个参数是起始位置从0开始,第二个参数是结束位置,第三个参数是目标数组,截取的时候是不包括结束位置的,目标数组替换的元素个数根据 被替换数组截取的个数决定,比如替换了3个 那么 目标数组就会取3个 不管目标数组有多少个元素