【问题标题】:How to print a content of the CharacterSet.decimalDigits?如何打印 CharacterSet.decimalDigits 的内容?
【发布时间】:2020-04-13 15:22:03
【问题描述】:

我尝试打印CharacterSet.decimalDigits 的内容:

print(CharacterSet.decimalDigits)

输出:CFCharacterSet 预定义的十进制数字集

但我的期望是这样的:

[1, 2, 3, 4 ...]

所以我的问题是:如何打印CharacterSet.decimalDigits的内容?

【问题讨论】:

标签: swift character-set


【解决方案1】:

这并不容易。字符集不是用来迭代的,它们是用来检查字符是否在其中。它们本身不包含字符,无法访问范围。

您唯一能做的就是遍历所有字符并根据字符集检查每个字符,例如:

let set = CharacterSet.decimalDigits
let allCharacters = UInt32.min ... UInt32.max

allCharacters
    .lazy
    .compactMap { UnicodeScalar($0) }
    .filter { set.contains($0) }
    .map { String($0) }
    .forEach { print($0) }

但是,请注意,这样的事情需要很长时间,不应该在生产应用程序中使用。

【讨论】:

  • 哇的输出... 7, ۹, , ⁁, ₂, ⃉, ℄, Ⅴ, ↆ, ⇇, ∥, , ०, १, २, ३, ४, ५, ६ , ७, ८, ९, ০, ১, ২, ৩, ৪, ৫, ৬, ৭, ৮, ৯, ੦, ੧, ੨, ੩, ੪, ੫, ੬, ੭, ੮, ੯, ૦, ૧ , ૨, ૩, ૪, ૫, ૬, ૭, ૮, ૯, ୦, ୧, ୨, ୩, ୪, ୫, ୬, ୭, ୮, ୯, ௦, ௧, ௨, ௩, ௪, ௫, ௬ , ௭, ௮, ௯, ౦, ౧, ౨, ౩, ౪, ౫, ౬, ౭, ౮, ౯, ೦, ೧, ೨, ೩, ೪, ೫, ೬, ೭, ೮, ೯, ൦, ൧ , ൨, ൩, ൪, ൫, ൬, ൭, ൮, ൯, ෦, ෧, ෨, ෩, ෪, ෫, ෬, ෭, ෮, ෯, ๐, ๑, ๒, ๓, ๔, ๕, ๖ ,๗,๘,๙,໐,໑,໒,໓,໔,໕,໖,໗,໘,໙,༠,༡,༢,༣,༤,༥,༦,༧,༨,༩,၀,၁ ,2,3,4,5,6,7,8,9,ရ,ဏ္ဍ,ဋ္ဌ,္ဘ,χ,့,္တွ,ဋ္ဋ,8,9,0,1,2,3,4,5,6 , ៧, ៨, ៩, ᠐, ᠑, ᠒, ᠓, ᠔, ᠕, ᠖, ᠗, ᠘, ᠙, ᥆, ᥇, ᥈, ᥉, ᱘, ᱙, ꘠, ꘡, ꘢, ꘣, ꘤, ꘥ ...
  • 您可以检查集合中包含字符的平面,而不是迭代 2^32 个字符,比较 stackoverflow.com/a/15742659/1187415
【解决方案2】:

我认为你不能这样做,至少不能直接这样做。如果你看一下

的输出
let data = CharacterSet.decimalDigits.bitmapRepresentation

for byte in data {
    print(String(format: "%02x", byte))
}

您会看到该集合在内部将位存储在十进制数字所在的代码位置。

【讨论】:

  • ... 00 ff 03 00 00 00 00 00 00 00 00 00 00 ff 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  • 为什么只有两个十六进制值:ff 和 03?为什么这些价值观如此分离?我在想数字是相邻的
  • 看看例如只有前 20 行左右的输出。您会看到第 7 和第 8 个字节分别是 0xFF 和 0x03。那是 10 位,恰好在 ASCII 编码中数字“0”-“9”所在的位置(在终端中运行 man 7 ascii 并查看十六进制表以供参考)。
  • 这仅适用于 Unicode 字符集的前 2^16 个字符,即基本多语言平面 (BMP)。此处描述了确切的格式:developer.apple.com/documentation/foundation/nscharacterset/….
猜你喜欢
  • 2019-08-29
  • 2021-07-04
  • 2014-06-04
  • 2020-09-08
  • 2020-08-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多