Arrays 将字符串拆分为数组,并对每个字符执行特定操作

Arrays 将字符串拆分为数组,并对每个字符执行特定操作,arrays,swift,string,Arrays,Swift,String,我有字符串,类似于(495)\uu-\ u-\ uu-\ uu-。那是电话号码的面具。我有一个图书馆的名字 该库有特定的规则来形成文本字段的掩码。因此,我需要将上面的掩码转换为{495[0][0][0][0][0][0],这将是正确的格式 所以,我想知道我是否可以通过map这样的函数来实现这一点?我只需要将字符串(495)\u-\ u-\ u-\ u-\ u-\ u-\ u-分解为字符数组。如果该字符等于“\u”或“*”,用户将在文本字段中添加字符,所以我只需将其替换为[0]。其他字符是符号,应

我有字符串,类似于
(495)\uu-\ u-\ uu-\ uu-
。那是电话号码的面具。我有一个图书馆的名字

该库有特定的规则来形成文本字段的掩码。因此,我需要将上面的掩码转换为
{495[0][0][0][0][0][0]
,这将是正确的格式

所以,我想知道我是否可以通过map这样的函数来实现这一点?我只需要将字符串
(495)\u-\ u-\ u-\ u-\ u-\ u-\ u-
分解为字符数组。如果该字符等于“\u”或“*”,用户将在文本字段中添加字符,所以我只需将其替换为[0]。其他字符是符号,应该保持不变

如何使用映射函数将字符串拆分为数组并形成新数组?

以下是一个解决方案:

let mask = "(495)_-___-____"
// use mask.map in swift 4
let strings: [String] = mask.characters.map {
    char in
    if char == "_" {
        return "[0]"
    } else if char == "-" {
        return "_"
    } else {
        return char.description
    }
}


let finalResult = "{" + strings.joined()
如您所见,代码非常简单。
map
闭包中的代码相当长,因此循环看起来可能更好(IMO)

下面是另一个不使用高阶函数的解决方案,但IMO更简单:

"{" + mask.replacingOccurrences(of: "_", with: "[0]")
    .replacingOccurrences(of: "-", with: "_")

您可以在对该字符串的字符进行迭代时创建一个新字符串。当您遇到一个字符时,您可以应用您的规则。您确定在开始时有一个不平衡的
{
吗?事实上,如果
\
的位置是常量,您可以在该位置上执行掩码。@Sweeper{没问题。@prabodhprakash是的,但我问我是否可以用map函数来解决这个问题。如果用
map
解决问题不是解决问题的绝对标准,那么用simple
for
循环来解决这个问题会更有意义。@prabodhprakash是的,我同意,但我想我可以用它使问题变得更简单、更清晰map@Sweeper谢谢,这是工作b但我仍然希望解决方案具有高阶函数,因为如果您掌握了它,将节省您的时间并减少代码。@EvgeniyKleban我认为没有更简单的方法使用
map
。但正如您在我的编辑中看到的,您可以使用2个
replaceOccurrence
调用。