从范围获取索引值

维亚切斯拉夫

我想在范围内检索随机表情符号。

let emojiRanges = [
                    0x1F601...0x1F64F,
                    0x1F680...0x1F6C0,
                ]
                let flattenEmoji = emojiRanges.flatten()
// the loop for emoji works
                for i in flattenEmoji {

                    let st = String(format:"0x%2X %@", i, String(UnicodeScalar(i)))
                    print(st)
                }

// but this is not possible to obtain value at wanted index
//there is a compiler error:
                let randomSign = String(UnicodeScalar(flattenEmoji[arc4random_uniform(UInt32(flattenEmoji.count))]))
                print("RANDOM \(randomSign)")

错误:

ViewController.swift:68:67:无法使用索引类型为“ UInt32”的下标“ FlattenBidirectionalCollection <[Range]>”(又名“ FlattenBidirectionalCollection >>”)的值

获得结果的正确方法是什么?

哈米什

问题是,它flatten()是延迟应用的,因此会返回一个特殊值FlattenBidirectionalCollection,该值由aFlattenBidirectionalCollectionIndex而不是an索引Int

因此,最简单的解决方案是简单地使用Array(_:)构造函数(或flatMap(_:)),以热切地应用范围的展平,这将创建一个数组,然后可以使用下标Int

let flattenEmoji = Array(emojiRanges.flatten()) // In Swift 3, flatten() is named joined()

let randomIndex = Int(arc4random_uniform(UInt32(flattenEmoji.count)))
let randomSign = String(UnicodeScalar(flattenEmoji[randomIndex]))

如果您希望平缓地应用拼合,则可以FlattenBidirectionalCollection通过advancedBy(_:)在集合的上使用直接为(对于Swift 2)添加下标startIndex

let randomIndex = flattenEmoji.startIndex.advancedBy(Int(arc4random_uniform(UInt32(flattenEmoji.count))))
let randomSign = String(UnicodeScalar(flattenEmoji[randomIndex]))

在Swift 3中,当集合移动其索引时,您想使用集合的index(_:offsetBy:)方法:

let randomIndex = flattenEmoji.index(flattenEmoji.startIndex, offsetBy: Int(arc4random_uniform(UInt32(flattenEmoji.count))))

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

获取数字的范围索引

来自分类Dev

获取范围变量与索引角度?

来自分类Dev

获取范围变量与索引角度?

来自分类Dev

获取与元素范围索引的交集

来自分类Dev

获取命名范围值

来自分类Dev

获取JQuery范围值

来自分类Dev

获取范围值

来自分类Dev

获取索引数组的值?

来自分类Dev

获取数组索引的值

来自分类Dev

[__NSArrayM objectAtIndex:]:获取文本值时超出范围[0 .. 0]的索引1

来自分类Dev

如何从给定的范围数组中获取具有最小最大值的匹配数组索引

来自分类Dev

从稀疏日期时间索引获取范围

来自分类Dev

通过范围索引获取整个数组

来自分类Dev

在Python中获取索引超出范围

来自分类Dev

如何从虚拟Listview获取OnData索引的范围

来自分类Dev

如何获取熊猫数据框的索引范围

来自分类Dev

从 Excel 获取数据 - 索引超出范围

来自分类Dev

插入基于索引范围中的列的值

来自分类Dev

Excel 值范围之间的索引匹配

来自分类Dev

获取表中索引的值

来自分类Dev

熊猫:如何获取索引值

来自分类Dev

获取包含值的对象的索引

来自分类Dev

获取随机匹配值的索引

来自分类Dev

循环对象以获取索引值

来自分类Dev

使用备用索引值获取mysql值

来自分类Dev

从数组中获取范围滑块值

来自分类Dev

获取“值“ 3000002000”超出整数类型的范围”

来自分类Dev

RegEx获取数值和带范围的值

来自分类Dev

在子指令中获取范围值