我的代码:
let range = 30...200 //ranges may have different bounds
let index = range.firstIndex(of: 55)
字符串
问题是index
的类型为ClosedRange<Int>.Index
,目前还不清楚如何将其转换为Int
以供进一步使用。
我理解,将range转换为数组并在其中查找int索引是比较简单的,但他们应该允许使用ClosedRange<Int>.Index
本身
注意:可能会有类似的问题,但都是关于如何将ClosedRange<Int>
转换为数组,而不是索引转换
1条答案
按热度按时间lx0bsm1f1#
ClosedRange<Bound>.Index
实际上只是一个枚举,它不会告诉你任何有用的信息。字符串
像这样简单的东西足以正确实现
Collection
和其他协议所需的索引相关方法。如果55在范围内,
firstIndex(of: 55)
将返回inRange(55)
,否则返回pastEnd
。另外请注意,
firstIndex
(and otherCollection
methods)仅在Bound
符合Stridable
且Stride
符合SignedInteger
时可用。毕竟,将ClosedRange<Double>
或ClosedRange<String>
视为Collection
是没有意义的。因此,像
firstIndex(of: 55)
这样的操作有意义的唯一范围是当Bound: Stridable, Bound.Stride: SignedInteger
。您可以使用distance(to: lowerBound)
(Stridable
上的一个方法)找出这样一个范围内的元素的“数字”索引。型
对于
ClosedRange<Int>
,这基本上是减法。55在30.200中的指数就是55 - 30 = 25。