Ios 整数数组到范围数组
我的任务: 我需要将数组划分为几个具有以下属性的数组:Ios 整数数组到范围数组,ios,arrays,swift,algorithm,sorting,Ios,Arrays,Swift,Algorithm,Sorting,我的任务: 我需要将数组划分为几个具有以下属性的数组: 每个子数组都是一个连续整数的范围。例如[1,2,3,4,5]将是[[1,5]] 当没有连续整数时,创建一个新的子阵列。例如[1,2,4,5]将是[1,2],[4,5] 例如: 如果我有这个整数数组-[0,1,5,6,3,7] 预期结果-[[0,1],[3],[5,7] 我已经试过了: let array: [Int] = [0, 1, 3, 4, 5, 6, 7] var group: [[Int]] = [] var temp: [In
[1,2,3,4,5]
将是[[1,5]]
[1,2,4,5]
将是[1,2],[4,5]
[0,1,5,6,3,7]
预期结果-[[0,1],[3],[5,7]
我已经试过了:
let array: [Int] = [0, 1, 3, 4, 5, 6, 7]
var group: [[Int]] = []
var temp: [Int] = [Int]()
for (index, element) in array.enumerated() {
if index + 1 < array.count {
let nextElement = array[index + 1]
let step = nextElement - element
// temp.append(element)
if(step) == 1 { // Until it's in range
temp.append(element)
} else { // One-by-one
temp.append(element)
group.append(temp)
temp = [Int]()
group.append([nextElement])
}
} else {
print(index)
}
}
print(group)
let数组:[Int]=[0,1,3,4,5,6,7]
变量组:[[Int]]=[]
变量温度:[Int]=[Int]()
对于数组中的(索引,元素)。枚举(){
如果索引+1
从我的代码中,我得到了这个结果-[[0,1],[3]]
有一个API,:
你想要什么还不清楚,你的例子模棱两可
如果您想要一个范围数组
let indexSet = IndexSet(array)
let rangeView = indexSet.rangeView
let group = rangeView.map { $0.indices.startIndex..<$0.indices.endIndex }
有一个API:
你想要什么还不清楚,你的例子模棱两可
如果您想要一个范围数组
let indexSet = IndexSet(array)
let rangeView = indexSet.rangeView
let group = rangeView.map { $0.indices.startIndex..<$0.indices.endIndex }
这是我发现的最好的方法:
let array: [Int] = [0, 1, 5, 6, 3, 7].sorted();
var group: [[Int]] = []
var temp: [Int] = [Int]()
var lastElement: Int = -1;
for (index, element) in array.enumerated() {
if lastElement == -1 {
temp.append(element);
}
else {
if element - lastElement == 1 {
temp.append(element);
}
else {
group.append(temp);
temp = [Int]();
temp.append(element);
}
}
lastElement = element;
}
if temp.count > 0 {
group.append(temp);
}
print(group)
这是我发现的最好的方法:
let array: [Int] = [0, 1, 5, 6, 3, 7].sorted();
var group: [[Int]] = []
var temp: [Int] = [Int]()
var lastElement: Int = -1;
for (index, element) in array.enumerated() {
if lastElement == -1 {
temp.append(element);
}
else {
if element - lastElement == 1 {
temp.append(element);
}
else {
group.append(temp);
temp = [Int]();
temp.append(element);
}
}
lastElement = element;
}
if temp.count > 0 {
group.append(temp);
}
print(group)
这是我的解决办法。我使用两个迭代器,而不是手动管理索引。一种是向前跑,表示跑步的“开始”,另一种是向前跑,以找到跑步的“终点” 我已经对代码进行了绅士化处理,可以处理任何
序列
(不仅仅是数组
),也可以处理任何可移动
类型(定义距离(to:)
,不一定只是Int
)
这是我的解决办法。我使用两个迭代器,而不是手动管理索引。一种是向前跑,表示跑步的“开始”,另一种是向前跑,以找到跑步的“终点” 我已经对代码进行了绅士化处理,可以处理任何
序列
(不仅仅是数组
),也可以处理任何可移动
类型(定义距离(to:)
,不一定只是Int
)
你尝试的结果是什么?你有什么问题?请用您的问题的详细信息更新您的问题。@rmaddy我没有得到我需要的结果,这是我的结果:[[0,1],[3]]。好的,我会更新我的问题。对于[0,1,5,6,3,7],预期结果不应该是[0,1]、[3]、[5,7]?@F.Sviatoslav如果[0,1,2,3,4,5]的结果是[0,5],[0,1,3,5,6,7]那么[0,1,5,7]的结果应该是[0,1]、[3]、[5,7]。@F.Sviatoslav?您的问题仍然显示出相互冲突的要求。您尝试的结果是什么?你有什么问题?请用您的问题的详细信息更新您的问题。@rmaddy我没有得到我需要的结果,这是我的结果:[[0,1],[3]]。好的,我会更新我的问题。对于[0,1,5,6,3,7],预期结果不应该是[0,1]、[3]、[5,7]?@F.Sviatoslav如果[0,1,2,3,4,5]的结果是[0,5],[0,1,3,5,6,7]那么[0,1,5,7]的结果应该是[0,1]、[3]、[5,7]。@F.Sviatoslav?你的问题仍然显示出相互冲突的要求。不错,但我猜这是一个家庭作业问题,使用
索引集
是作弊。不错,但我猜这是一个家庭作业问题,使用索引集
是作弊。