当我的数字数组像-> ["1","2","3","4","5","6","7"]
let numbers = ["1","2","3","4","5","6","7"]
let chunkSize = 2
let chunks = stride(from: 0, to: numbers.count, by: chunkSize).map {
Array(numbers[$0..<min($0 + chunkSize, numbers.count)])
}
// prints as [["1", "2"], ["3", "4"], ["5", "6"], ["7"]]
但是当我的数字数组像
(
{
"facility_id" = 1;
"options_id" = 3;
},
{
"facility_id" = 3;
"options_id" = 12;
},
{
"facility_id" = 2;
"options_id" = 7;
},
{
"facility_id" = 3;
"options_id" = 12;
},
{
"facility_id" = 2;
"options_id" = 6;
},
{
"facility_id" = 1;
"options_id" = 4;
}
)
正在显示此错误:
无法将“ CountableRange”类型的值转换为预期的参数类型“ Int”
答案 0 :(得分:1)
如果这段代码
[{'id':1},{'id':2},{'id':3},{'id':4},{'id':5},{'id':6},{'id':7}]
是Dictionary
,那么您的策略应类似于:
示例:
let dict = [["id": 1], ["id": 2], ["id": 3], ["id": 4]]
let numbers = dict.flatMap { $0.values } // [1, 2, 3, 4]
let chunkSize = 2
let chunks = stride(from: 0, to: numbers.count, by: chunkSize).map {
Array(numbers[$0..<min($0 + chunkSize, numbers.count)])
}
print(chunks) // [[1, 2], [3, 4]]
UPD。
我看到numbers
是相同的变量,但是它可以包含不同的值。在这种情况下,您可以检查numbers
的类型,然后使用适当的方式进行分组。
var values: [Int] = []
if let numbers = numbers as? [String] {
values = numbers.map { Int($0) }
} else if let numbers = numbers as? [[String, Int]] {
values = numbers.compactMap { $0["id"] }
}
然后在values
上大步前进:
let chunkSize = 2
let chunks = stride(from: 0, to: numbers.count, by: chunkSize).map {
Array(values[$0..<min($0 + chunkSize, numbers.count)])
}
print(chunks) // [[1, 2], [3, 4]]
请注意,numbers
应该是快速的Array
,而不是NSMutableArray
,因为NSMutableArray
不能通过使用CountableRange
进行下标。>
答案 1 :(得分:1)
尝试以下解决方案:
let numbers = [["id":1],["id":2],["id":3],["id":4],["id":5],["id":6],["id":7]]//["1","2","3","4","5","6","7"]
let chunkSize = 2
let chunks = stride(from: 0, to: numbers.count, by: chunkSize).map {
Array(numbers[$0..<min($0 + chunkSize, numbers.count)])
}
print("chunks :: ", chunks)
//打印为[[["id": 1], ["id": 2]], [["id": 3], ["id": 4]], [["id": 5], ["id": 6]], [["id": 7]]]
如果只需要数字,请尝试以下代码:
let numbersDictArray = [["id":1],["id":2],["id":3],["id":4],["id":5],["id":6],["id":7]]
let numbers = numbersDictArray.flatMap { $0.values }
let chunkSize = 2
let chunks = stride(from: 0, to: numbers.count, by: chunkSize).map {
Array(numbers[$0..<min($0 + chunkSize, numbers.count)])
}
print("chunks :: ", chunks)
//打印为[[1, 2], [3, 4], [5, 6], [7]]
答案 2 :(得分:1)
您的代码看起来正确。问题出在您的输入数组上。根据您的评论之一
@adev-> var dataArray:NSMutableArray = NSMutableArray.init()–
您正在使用NSMutableArray
,而不是快速的Array
。 NSMutableArray不能使用CountableRange<Int>
$0..<min($0 + chunkSize, numbers.count) //returns CountableRange<Int>
您需要使用快速Array
来完成这项工作