gpt4 book ai didi

Dart:如何更新 Set 中的值

转载 作者:行者123 更新时间:2023-12-03 03:07:45 27 4
gpt4 key购买 nike

如何更新索引处的值 0

Set<int> set = {1, 2, 3};
set[0] = 0; // error

注:

我不是在寻找像转换这样的解决方法 SetList ,添加元素并进一步将其转换回 Set

最佳答案

集合元素仅附带索引,因为它们是可迭代的。您不能“更新位置 x 处的值”,因为任何更新都可能更改顺序。

我假设您确实希望保留迭代顺序(在这种情况下,您确实应该使用列表!),因此以下内容不起作用:

 void update<T>(Set<T> elements, int index, T newValue) {
set.remove(set.elementAt(index));
set.add(newValue);
}

这里的问题是您不会保留迭代顺序,您添加的新值可能在迭代结束时(如果您使用的是插入顺序集),或者顺序可能已经完全改变(如果您是不是)。

一种适用于插入有序集的方法:
void replace<T>(Set<T> set, int index, T newValue) {
if (set.contains(newValue)) throw StateError("New value already in set");
int counter = 0;
while (counter < set.length) {
var element = set.first;
set.remove(element);
if (counter == index) element = newValue;
set.add(element);
}
}

这会重复删除集合中的第一个元素,然后再次插入,除了 index第 th 个元素,它插入的位置 newValue反而。
这仅适用于插入顺序集(如默认的 LinkedHashSet )。
(请注意,如果 newValue 已经在集合中,这将不起作用,所以在这种情况下我让它抛出)。

对于所有其他集合,没有比 (set.toList()..[index] = newValue).toSet() 更好的解决方案.

关于Dart:如何更新 Set 中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58376687/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com