草庐IT

swift 有序集

coder 2023-07-15 原文

Swift 有有序集合类型吗?如果没有,如果我想使用一个,我有什么选择?

标准库的 Set 是无序的,正如文档中明确指出的那样:

Arrays are ordered collections of values. Sets are unordered collections of unique values. Dictionaries are unordered collections of key-value associations.

然而,许多适用于实现有序集(和字典)的数据结构是已知的,特别是 balanced binary trees例如Red-Black trees .

例如,c++ 的 STL 有 ordered sets和 map ,并允许使用下限和上限对它们进行范围查询。

我知道一个集合的成员可以排序到一个数组中,但我在寻找一个具有O(log(n)) 插入、删除和查询的数据结构。

最佳答案

Swift 没有原生的有序集类型。如果你使用 Foundation,你可以在 Swift 中使用 NSOrderedSet。如果没有,您有机会编写自己的有序集数据结构。

更新:Swift Package Manager includes an OrderedSet implementation这可能会有用。它包装了一个数组和一个集合,并管理获取有序集合行为的访问。

更新 #2:Apple's Swift Collections repository包含有序集实现。

关于 swift 有序集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46534269/

有关swift 有序集的更多相关文章

  1. ruby-on-rails - 给定有序的 id 列表对对象数组进行排序 - 2

    我有一组对象@users,每个对象都有其id属性。@users=[#,#]我还有一个有序的ids数组。ids=[2,1]¿是否有一种神奇的方法可以使用该ID列表对集合进行排序?如果可能,不再次调用数据库。谢谢!!! 最佳答案 其实你不需要排序,建立一个中间的索引散列,它是O(n):users_by_id=Hash[@users.map{|u|[u.id,u]}]users_by_id.values_at(*ids)如果您仍想尝试排序方法,Schwartziantransform就足够了:@users.sort_by{|u|ids.i

  2. ruby-on-rails - ruby 或 rails 中有序数到基数的函数吗? - 2

    我正试图找到一种更好的方式来表达我的cucumber,所以我正在寻找一个将其转换为基数的函数:WhenIfillupthefirstpassengerfieldThenIshouldseethepassengerlistupdatewiththefirstpassengerdetailsWhenIfollow"AddAnotherPassenger"ThenIshouldseeasecondpassengerfieldWhenIfillupthesecondpassengerfieldThenIshouldseethepassengerlistupdatewiththesecondpa

  3. ruby - 除了将其转换为数组之外,还有什么方法可以获取有序哈希的第 N 个键或值吗? - 2

    在Ruby1.9.x中,我有一个维持其顺序的散列hsh={9=>2,8=>3,5=>2,4=>2,2=>1}除此之外还有其他方法可以说出第三个元素的键:hsh.to_a[2][0] 最佳答案 尝试使用Hash#keys和Hash#values:thirdKey=hsh.keys[2]thirdValue=hsh.values[2] 关于ruby-除了将其转换为数组之外,还有什么方法可以获取有序哈希的第N个键或值吗?,我们在StackOverflow上找到一个类似的问题:

  4. ruby - 如何在 Ruby 1.9 中只获取有序哈希的一个子集? - 2

    让我们举个例子:d={"a"=>1,"b"=>2,"c"=>3,"d"=>4}由于哈希现在是有序的,我可能想要从a到b或从c到d。问题是我无法执行d[0..1]或d[2..3]。不过我可以这样做:irb>d.to_a[0..1]=>[["a",1],["b",2]]...但这感觉很乱,我不想为这样的操作转换我的哈希值。是否有更清洁的解决方案来处理这个问题?#HolyGrailirb>d[0..1]=>{"a"=>1,"b"=>2}我可以看到如何为自己编写这样的方法,但可能已经有一些原生的东西我可以使用...? 最佳答案 你可以这样做

  5. ruby - 获取通用 Rack 应用程序中中间件的有序列表? - 2

    除了通用Rack应用程序之外,我正在寻找的功能类似于Rails中的rake中间件命令。 最佳答案 $rakemiddlewareuseActionDispatch::StaticuseRack::Lockuse#useRack::RuntimeuseRack::MethodOverrideuseActionDispatch::RequestIduseRails::Rack::LoggeruseActionDispatch::ShowExceptionsuseActionDispatch::DebugExceptionsuseActi

  6. 代码随想录day2|有序数组的平方、长度最小的子数组、螺旋矩阵 - 2

    前言:今天去校医院拔了两颗牙,太痛了,今天写的博客就比较水。1、有序数组的平方(双指针法)classSolution{public:vectorsortedSquares(vector&nums){intk=nums.size()-1;vectorresult(nums.size(),0);//创造一个数组result长度与nums相同for(inti=0,j=nums.size()-1;i2、长度最小的子数组(滑动窗口)classSolution{public:intminSubArrayLen(inttarget,vector&nums){intresult=INT32_MAX;//返回值

  7. 合并两个有序链表 - 2

    文章目录1.题目描述2.解题思路方法1:方法2:1.题目描述题目链接:力扣21,合并两个有序链表将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。2.解题思路方法1:首先我们能够想到的就是遍历一遍数组,判断两个结点的大小,将数值小的结点放在前面,数值大的不断尾插在后面。是不是听着挺简单的?具体实现:我们可以创建两个空指针,head用来存放链表的头结点,tail用来遍历两条链表,将两条链表链接起来。当某个链表为空时,我们可以直接返回另一条链表当两个链表都不为空时,我们可以不断比较两条链表的大小,当head和tail为空时,我们将较小的结点同时赋给head

  8. javascript - JQuery 从有序列表中删除第一项 - 2

    我有一个无序列表,我将数据添加到如下:jQuery("#mylist").prepend(newItem);当列表达到一定大小时,我需要在添加新项之前删除插入的第一项。根据通过其ID访问有序列表,我如何获取要删除的第一个项目。类似于:jQuery("#mylist")[0].remove();谢谢 最佳答案 既然你提到了有序列表,我假设#mylist中包含li标签,因此这应该可以工作jQuery("#mylistli:first-child").remove();我看到你在前面,如果你想删除最后一个元素jQuery("#mylist

  9. javascript - 如何从数组数据制作嵌套有序列表 - 2

    我有这样的数据:vararray=["a","b","c","d","e"];我想像这样转换这些数据:abcd我会试试这个:varmakeNestedList=()=>{$.each(array,function(i,el){nested+='';nested+=''+el+'';makeNestedList();nested+='';});};但是为什么结果是空的呢? 最佳答案 你可以使用Array#reduceRight并首先创建最嵌套的节点,然后再创建外部节点。vararray=["a","b","c","d","e"],re

  10. swift - 将 json 编码时间转换为 nsdate - 2

    当我将time.Now()编码到JSON对象时,它给出的结果为"2009-11-10T23:00:00Z"但打印时间。现在给出2009-11-1023:00:00+0000UTC。他们为什么不同。什么是T和Z。另外,如何根据this将其转换为swiftNSDate对象?表? 最佳答案 这些值的含义无关紧要,它们是该格式(ISO8601)的一部分。有几种方法可以解决这个问题。一种是为时间或您的结构定义自定义MarshalJSON()方法并使用它来格式化日期,另一种是首先在您的结构中将其表示为字符串,以便当默认实现执行你得到你正在寻找的

随机推荐