Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 我可以将数组中的第一个字符过滤为字符串,第二个字符过滤为Int吗?_Arrays_Swift_Filter - Fatal编程技术网

Arrays 我可以将数组中的第一个字符过滤为字符串,第二个字符过滤为Int吗?

Arrays 我可以将数组中的第一个字符过滤为字符串,第二个字符过滤为Int吗?,arrays,swift,filter,Arrays,Swift,Filter,我想如果可以将第一个字符过滤为字符串,将第二个字符过滤为Int?例如,我在数组上有M1:testm和B2:testm 如果我使用此代码: filter{$0.contains(“M”) 它将同时过滤M1和B2,因为它们上面都有M字符 我在想,如果有什么方法可以使用过滤器{$0.contains(“m”+number),那么它只能在m之后有一个数字时进行过滤。你可以映射字符串,将分隔的组件拆分为:“。添加一个保护以过滤以所需字母开头的结果元素前缀,删除该前缀的第一个字符,并将结果字符串强制为Int

我想如果可以将第一个字符过滤为字符串,将第二个字符过滤为Int?例如,我在数组上有
M1:testm
B2:testm

如果我使用此代码:

filter{$0.contains(“M”)

它将同时过滤
M1
B2
,因为它们上面都有
M
字符


我在想,如果有什么方法可以使用
过滤器{$0.contains(“m”+number)
,那么它只能在
m

之后有一个数字时进行过滤。你可以映射字符串,将
分隔的组件拆分为:“
。添加一个保护以过滤以所需字母开头的结果元素前缀,删除该前缀的第一个字符,并将结果字符串强制为Int:

let array = ["M1: test","M2: test", "B2: test"]

let values: [Int] = array.flatMap {
    guard
        let prefix = $0.components(separatedBy: ":").first,
        prefix.first == "M" else { return nil }
        return Int(prefix.dropFirst()) ?? 0
}

print(values)  // "[1, 2]\n"

如果需要对它们进行分组并修剪空白:

let array = ["M1: test"," M2: test", "B2: test"]

let results = array.flatMap{ string -> (letter: String, value: Int, note: String)? in
    guard
        case let components = string.components(separatedBy: ":"),
        let prefix = components.first?.trimmingCharacters(in: .whitespaces),
        let suffix = components.last?.trimmingCharacters(in: .whitespaces),
        let letter = prefix.first else { return nil }
    return (String(letter), Int(prefix.dropFirst()) ?? 0, suffix)
}

print(results)  // "[(letter: "M", value: 1, note: "test"), (letter: "M", value: 2, note: "test"), (letter: "B", value: 2, note: "test")]\n"

如果您只需要前缀为“M”的元素:


您可以将字符串映射为拆分由“
”分隔的组件:“
”。添加一个保护以筛选以所需字母开头的结果元素前缀,删除该前缀的第一个字符,并将结果字符串强制为Int:

let array = ["M1: test","M2: test", "B2: test"]

let values: [Int] = array.flatMap {
    guard
        let prefix = $0.components(separatedBy: ":").first,
        prefix.first == "M" else { return nil }
        return Int(prefix.dropFirst()) ?? 0
}

print(values)  // "[1, 2]\n"

如果需要对它们进行分组并修剪空白:

let array = ["M1: test"," M2: test", "B2: test"]

let results = array.flatMap{ string -> (letter: String, value: Int, note: String)? in
    guard
        case let components = string.components(separatedBy: ":"),
        let prefix = components.first?.trimmingCharacters(in: .whitespaces),
        let suffix = components.last?.trimmingCharacters(in: .whitespaces),
        let letter = prefix.first else { return nil }
    return (String(letter), Int(prefix.dropFirst()) ?? 0, suffix)
}

print(results)  // "[(letter: "M", value: 1, note: "test"), (letter: "M", value: 2, note: "test"), (letter: "B", value: 2, note: "test")]\n"

如果您只需要前缀为“M”的元素:


尝试使用此方法。假设值数组为命名数据,在冒号处拆分每个值。取第一个子字符串并检查“M”。如果找到,则返回true,否则返回false

let data = ["M1: test M", "B2: test M", "M21: test A"]
let result = data.filter { $0.split(separator: ":").first?.contains("M") ?? false }

尝试使用此选项。假设值数组为命名数据,则在冒号处拆分每个值。取第一个子字符串并检查“M”。如果找到,则返回true,否则返回false

let data = ["M1: test M", "B2: test M", "M21: test A"]
let result = data.filter { $0.split(separator: ":").first?.contains("M") ?? false }

.filter在集合上循环并返回一个数组,该数组只包含与包含条件匹配的元素。当您说“filter as”时,是指将它们作为字符串和Int放入结果集合中,例如:[String(“M”)、Int(“2”)!]?.filter在集合上循环并返回一个数组,该数组仅包含与包含条件匹配的元素。当您说“filter as”时,您的意思是将它们作为字符串和Int放入结果集合中,例如:[String(“M”)、Int(“2”)!]?它的作用是什么?它只在
之前去过滤吗?字符串有一个名为hasPrefix的属性,它的作用是什么?它只在
之前去过滤吗?字符串有一个名为hasPrefix的属性,它的作用是什么?是的,但如果它是
[“M1:test M”,“B2:test M”,“M21:test a”]
它会正确地打印它们吗?因为到处都是一个“M”。它会在字符串中计算空白吗?例如“test”和“test”。我想你会注意到区别。是的,但是如果是
[“M1:test M”、“B2:test M”、“M21:test a”]
它会正确地打印它们吗?因为到处都是一个“M”.是否计算字符串中的空白?例如“test”和“test”。我想您会注意到其中的差异。