Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 添加到列表,然后对FindLastIndex排序,然后插入_C#_List - Fatal编程技术网

C# 添加到列表,然后对FindLastIndex排序,然后插入

C# 添加到列表,然后对FindLastIndex排序,然后插入,c#,list,C#,List,我有一个按属性排序的项目列表。我想在列表中添加另一项,但仍然会得到一个已排序的列表。我看到了两种简单的方法,但哪种更快/更好 将项目添加到列表,然后对列表或 使用FindLastIndex,然后在索引+1上插入项 还是有其他我不知道的方法?在我看来,我认为 使用FindLastIndex,然后在索引+1上插入项 应该会更好,因为在诉诸过程中,至少会对列表进行一次检查:)在我看来,我认为 使用FindLastIndex,然后在索引+1上插入项 应该会更好,因为至少在使用过程中,会对列表进行一次

我有一个按属性排序的项目列表。我想在列表中添加另一项,但仍然会得到一个已排序的列表。我看到了两种简单的方法,但哪种更快/更好

  • 将项目添加到列表,然后对列表或
  • 使用FindLastIndex,然后在索引+1上插入项
还是有其他我不知道的方法?

在我看来,我认为

使用FindLastIndex,然后在索引+1上插入项


应该会更好,因为在诉诸过程中,至少会对列表进行一次检查:)

在我看来,我认为

使用FindLastIndex,然后在索引+1上插入项


应该会更好,因为至少在使用过程中,会对列表进行一次遍历:)

以下是一些有趣的事实:

选项1:1)插入列表中的所有项目。只要插入就可以了 O(1)。2) 通过某种排序算法对列表进行排序。最快最坏情况 是O(n logn)

选项2:1)查找。使用二进制搜索,最坏的情况是O(logn),但不是您的情况:)(您的 使用FindLastIndex(谓词)的case:这是一个 O(n)运算,其中n是数组的长度。)2)插入数字 将是O(1)


基本上,如果您只想在最后一个索引中添加项目,那么第二个选项肯定更快,也是最好的选项。

以下是一些有趣的事实:

选项1:1)插入列表中的所有项目。只要插入就可以了 O(1)。2) 通过某种排序算法对列表进行排序。最快最坏情况 是O(n logn)

选项2:1)查找。使用二进制搜索,最坏的情况是O(logn),但不是您的情况:)(您的 使用FindLastIndex(谓词)的case:这是一个 O(n)运算,其中n是数组的长度。)2)插入数字 将是O(1)


基本上,如果您只想在最后一个索引中添加项目,那么第二个选项肯定更快,也是最好的选项。

您是否尝试过对这两个选项进行基准测试?答案很明显。关于另一种方式:如果项目是(或必须是)唯一的,您可以使用
SortedSet
,或者,因为您提到它是按属性排序的,
SortedList
,其中属性用作键如果使用第一个,您可能需要知道您使用的是什么算法,如果您使用的是microsoft实施,则最有可能是快速排序。平均情况下的复杂度O(n logn)[精细]。如果您再次使用第二种方法,您需要编写算法,这完全取决于您在最坏或平均情况下的算法。假设您正在添加列表中最高的数字?您是否尝试对这两个数字进行基准测试?答案很明显。关于另一种方式:如果项目是(或必须是)唯一的,您可以使用
SortedSet
,或者,因为您提到它是按属性排序的,
SortedList
,其中属性用作键如果使用第一个,您可能需要知道您使用的是什么算法,如果您使用的是microsoft实施,则最有可能是快速排序。平均情况下的复杂度O(n logn)[精细]。如果您再次使用第二种方法,您需要编写算法,这完全取决于您在最坏或平均情况下的算法。假设您正在添加列表中最高的数字?应该更好,因为在重新选择时,至少该过程将遍历列表一次:),因此您正在将每个元素与输入进行比较。假设您的元素是最高的,并且列表中有100万条记录。使用二进制搜索:)在100万条记录中,它至少会读取列表中的墙项目一次。这样做会更好,因为在重新排序时,进程至少会遍历列表一次:),因此您会将每个元素与输入进行比较。假设您的元素是最高的元素,并且列表包含100万条记录。使用二进制搜索:)在100万条记录中,它至少会读取列表中的墙项目一次