草庐IT

Sequence

全部标签

快速序列变形

Swift的标准库是否包含listanamorphism对于Sequence或类似的东西?列表或序列上的变形与reduce相反功能。因此,它不会将序列折叠成单个值,而是向上构建序列。reduce接受一个初始值和一个用于将序列元素与此组合的函数,并返回一个最终值。它的签名看起来像这样(为了便于阅读而添加了换行符):publicfuncreduce(_initialResult:Result,_nextPartialResult:(Result,Self.Element)throws->Result)rethrows->Result序列的变形可能是这样的:funcinflate(_init

swift - 将对步骤使用除法的 C 样式 for 循环转换为 Swift 3

我有这个循环,在Swift2中按除法递减一个整数。forvari=128;i>=1;i=i/2{//dosomething}C风格的for循环已被弃用,那么如何将其转换为Swift3.0? 最佳答案 可以实现具有非恒定步幅的相当一般的循环与sequence:foriinsequence(first:128,next:{$0>=2?$0/2:nil}){print(i)}优点:循环变量i是常量,作用域是仅限于循环体。可能的缺点:必须调整终止条件(此处:$0>=2而不是i>=1),并且循环始终执行至少一次,对于第一个值。也可以编写一个类

arrays - Swift 中的 elementsEqual 和 '==' 有什么区别?

我正在浏览Swift标准库,我遇到了方法elementsEqual用于比较序列。我并没有真正看到这个函数的值(value),因为它只会在顺序完全相同时返回true。我想如果它能告诉我两个序列是否包含相同的元素,它们会有一些用处,它们只是碰巧处于不同的顺序,因为这会省去我自己排序的麻烦。这让我想到了我的问题:比较两个序列时,使用elementsEqual和'=='有什么区别吗?两者之间有优缺点吗?我在我的Playground上,编写了以下测试:让值=[1,2,3,4,5,6,7,8,9,10]让其他值=[1,2,3,4,5,6,7,8,9,10]值==其他值values.elements

ios - 接受类型序列的函数

我想要一个接受Int序列的函数。这是我想写的:funcprocess(items:Sequence){items.forEach{...}}Error:"Cannotspecializenon-generictype'Sequence'".更正(我认为):funcprocess(items:S)whereS.Iterator.Element==Int{items.forEach{...}}比较冗长。我知道Sequence协议(protocol)有一个相关联的Iterator类型,它有Element。但我不太清楚为什么我必须以这种奇怪的方式解决Int要求。使第一个版本不起作用但使第二个版

swift 错误 : 'Sequence' requires the types 'T' and 'ArraySlice<T>' be equivalent

我正在尝试更新数学库以与Swift3兼容,但我遇到了一个错误:'Sequence'requiresthetypes'T'and'ArraySlice'beequivalentApple关于Sequence的文档建议makeIterator()方法返回一个迭代器,它确实这样做了。迭代器似乎返回了grid中的一个元素变量,即变量T.我不太确定我在这里错过了什么。任何意见将是有益的。publicstructMatrixwhereT:FloatingPoint,T:ExpressibleByFloatLiteral{publictypealiasElement=Tletrows:Intletc

swift - 是否可以缩短对更高级别功能的评估?

我正在寻找一种在评估部分输入序列后停止更高级别函数的方法。考虑在满足特定条件的序列中查找第一个索引时的情况。例如,假设我们正在寻找Int数组a中的第一个位置,其中两个连续值的总和大于100。你可以用一个循环来完成,像这样:funcfirstAbove100(a:[Int])->Int?{ifa.count100{returni}}returnnil}一旦发现感兴趣的位置,循环就会停止。我们可以使用reduce重写这段代码,如下所示:funcfirstAbove100(a:[Int])->Int?{ifa.count100?i:nil)}}但是,这种方法的缺点是reduce一直到a.co

swift - 未定义的行为,或 : Does Swift have sequence points?

在C/C++中,第二条语句inti=0;intj=i+++i+++++i;同时调用未指定的行为,因为操作数的评估顺序未指定,并且未定义的行为,因为对同一对象i的副作用相对于彼此是无序的。例子见Whyaretheseconstructs(using++)undefinedbehavior?Undefinedbehaviorandsequencepoints现在,鉴于Swift被设计为一种安全语言,那么什么是这里对应的情况?结果是vari=0letj=i+++i+++++i定义明确?可以从中的语言引用中得出结论吗?Swiftbookj==4? 最佳答案

arrays - Int类型不符合协议(protocol)顺序

我在Swift3中有以下代码:varnumbers=[1,2,1]fornumberinnumbers.count-1{//errorifnumbers[number]我正在检查索引[number]上的值是否总是高于索引[number+1]上的值。我收到一个错误:TypeIntdoesnotconformtoprotocolsequence有什么想法吗? 最佳答案 它可能很快。您可以使用此迭代。fornumberin0.. 关于arrays-Int类型不符合协议(protocol)顺序,

swift - 如何获取符合 `Sequence` 的类型的计数?

假设我有这段代码:funcwork(sequence:S){//dostuff}我怎么知道sequence中有多少个元素?我想要的明显版本效率很低:varcount=0forelementinsequence{count+=1}一定有更好的方法,对吧? 最佳答案 我认为没有更好的方法来满足任意类型序列类型。关于序列的唯一已知信息是是有一个generate()方法返回一个GeneratorType,这反过来有一个next()方法。next()方法前进到下一个序列的元素并返回它,如果存在则返回nil没有下一个元素。请注意,根本不需要ne

ios - 数组不可用 : please construct an Array from your lazy sequence: Array(. ..)

我刚从swift1.2升级到2。我得到一个数组'不可用:请从你的惰性序列构造一个数组:Array(...)我似乎不知道如何解决这个问题MyVariables.selectedUser=MyVariables.dictionary.keys.array[indexPath.row]asString“MyVariables.dictionary.keys.array[indexPath.row]asString”应该改成什么? 最佳答案 意思是keys返回的惰性序列的array属性不再可用。在Swift2中,您使用初始化程序将惰性序列转