Dart 如何在特定索引处插入集合

Dart 如何在特定索引处插入集合,dart,Dart,我的节目有一套 Set<MyObject> set = {}; 如何在索引0处插入集合 set.insert(index, object,); (set类中不存在insert)按照老程序员的建议,您必须使用列表。但是,我可以看到不需要插入副本,因此您使用的是集合。为此,您可以在循环中使用in操作并相应地插入 列表数据=[]; //您可以通过检查是否将对象添加到列表中 //它已经在那里了 if(数据中的对象){ 打印(“已存在”); }否则{ 数据。插入(索引、对象); } //打

我的节目有一套

Set<MyObject> set = {};
如何在索引0处插入集合

set.insert(index, object,);

(set类中不存在insert)

按照老程序员的建议,您必须使用
列表
。但是,我可以看到不需要插入副本,因此您使用的是
集合
。为此,您可以在循环中使用
in
操作并相应地插入

列表数据=[];
//您可以通过检查是否将对象添加到列表中
//它已经在那里了
if(数据中的对象){
打印(“已存在”);
}否则{
数据。插入(索引、对象);
}
//打印要检查的数据
打印(数据);

我希望这能让您更清楚,并得到您想要的东西。

默认情况下,
Set
是一个
LinkedHashSet
,它按插入顺序存储项目

同样,使用
列表
而不是
集合
可以让您完全控制元素顺序,但这需要您自己检查元素的唯一性。因此,插入、删除和查找都将是O(n),而不是通常的O(1)。如果您经常需要删除元素或者经常需要检查元素是否已经存在,这将不是一个有效的解决方案

如果不需要对元素顺序进行完全控制,则可以继续使用
。若要强制某个项目位于开头,您需要删除并重新添加所有其他项目。一种方法是创建一个新的
集合

set={object,…set};
如果需要对现有的
集合进行变异,可以添加额外的步骤:

var-temporarySet={object,…set};
set..clear()…addAll(临时设置);
请注意,在这两种情况下,插入的运行时复杂性都是O(n),而不是通常的O(1)。删除和查找将保持O(1)

如果您需要经常在开头插入,并且只在开头插入,您可能会通过始终向后迭代
集合
,将最后一个元素视为第一个元素来作弊:

//强制“object”为最后一个。
设置..删除(对象)…添加(对象);

然后使用
set.last
而不是
set.first
或在迭代时使用
set.toList()。反转。这将允许插入、删除和查找继续为O(1)。

集合是无序的,因此没有索引。也许你需要一个新的?@old程序员实际上,
Set
的默认实现是一个
LinkedHashSet
,它使用插入顺序。我使用了一个不同的解决方法(一个附加的集合),但这是一个更干净的选项,谢谢@alokNo problem@lino arango。继续学习!祝你一切顺利:)
set.insert(index, object,);