我想从一个字符串创建一个整数数组[Int],该字符串应该包含一个逗号分隔的列表。
以下是一些有效的输入:
$(function () {
var data = [];
for (var i = 0; i < 14; i++) {
data.push([i, Math.sin(i)]);
}
var options = {
grid: {
hoverable: true,
autoHighlight: true
},
yaxis: {
min: -1.2,
max: 1.2
}
};
var plot = $.plot("#placeholder", [data], options);
var a = plot.getAxes().yaxis.datamin;
alert(a);
});
以下是一些无效输入:
1
1,2,3
1,5,10
我设法为第一部分提出了一些建议,即使用以下代码将值分离出来:
[nil] // no value set
1,,2,3 // extra commas
1,Z,10 // characters other than numbers and commas
不幸的是,该代码不处理上面列出的无效输入,并且应用程序在大多数情况下都会崩溃。添加一些检查的最佳方法是什么,这样如果存在无效列表,我们只返回func get_numbers() -> Array<Int>{
return self.numbers_as_csv_string!
.components(separatedBy: ",")
.map { word in Int(word.trimmingCharacters(in: CharacterSet.whitespaces))! }
}
?我想要最短的代码 - 正则表达式是最好的方式吗?
非常感谢提前!
答案 0 :(得分:6)
使用!
忽略无法转换为flatMap
的组件,而不是使用Int
来强制解包:
func get_numbers() -> Array<Int> {
return self.numbers_as_csv_string!
.components(separatedBy: ",")
.flatMap {
Int($0.trimmingCharacters(in: .whitespaces))
}
}
示例结果:
1 => [1]
1,2,3 => [1,2,3]
1,5,10 => [1,5,10]
nil => []
1,,2,3 => [1,2,3]
1,Z,10 => [1,10]
答案 1 :(得分:0)
Swift 3
Int array to String
let arjun = [1,32,45,5]
print(self.get_numbers(array: arjun))
func get_numbers(array:[Int]) -> String {
let stringArray = array.flatMap { String(describing: $0) }
return stringArray.joined(separator: ",")
String to Int Array
let arjun = "1,32,45,5"
print(self.get_numbers(stringtext: arjun))
func get_numbers(stringtext:String) -> [Int] {
let StringRecordedArr = stringtext.components(separatedBy: ",")
return StringRecordedArr.map { Int($0)!}
}
答案 2 :(得分:0)
也许是旧式,但它适用于多种字符串
class func parseCommaSeparatedNumbers(string: String!) -> [Int] {
var integerArray = [Int]()
var bufferedString = ""
func appendConvertedNumberToIntegerArray() -> Void {
bufferedString = bufferedString.replacingOccurrences(of: " ", with: "")
bufferedString = bufferedString.trimmingCharacters(in: CharacterSet(charactersIn: "01234567890").inverted)
if let integerValue = Int(bufferedString) {
integerArray.append(integerValue)
}
bufferedString.removeAll()
}
for character in string.characters {
if character != "," {
bufferedString.append(character)
}else {
appendConvertedNumberToIntegerArray()
}
}
if bufferedString != "" {
appendConvertedNumberToIntegerArray()
}
return integerArray
}