2016-09-26 110 views
0

我正在整合ios-charts。我想根据json响应来布局y-axis of graph dynamically。例如: - 如果json包含50个值,那么我将绘制10(50/5)+5 = 15 yaxis值。这15个值必须包含最小和最大json值。剩下的13个值必须在它们之间有固定的步长。我写了多个逻辑,并没有提供正确的结果。我对想法持开放态度。图表的动态y轴

回答

1

您需要找到最小公倍数,并以此为基础来挑选出正确的值。我在这里找到了一些不错的工作:Ray Wenderlich Algorithms

在你上面的例子中,你将得到一个commonMultiple = 150originalCount是您必须以(50)开始的值的数量。

那么这将是这样的事情,我猜。 values是从您的json创建的值的数组。

var multipliedValues = [Int]() 
for value in values { 
    multipliedValues += [Int](repeating: value, count: commonMultiple/originalCount) 
} 

然后你就可以挑选出一个子集的值:

let numberOfSteps = (originalCount/5)+5 
var yValues = [Int]() 
for n in 0..<numberOfSteps{ 
    let index = n*commonMultiple/numberOfSteps 
    yValues.append(multipliedValues[index]) 
} 

然后最终棘手的部分是插入的最低和最高值。也许这样的事:

let minValue = values.sorted().first! 
if !yValues.contains(minValue) { 
    let minIndex = multipliedValues.index(of: minValue)!/(commonMultiple/numberOfSteps) 
    yValues[minIndex] = minValue 
} 
let maxValue = values.sorted().last! 
if !yValues.contains(maxValue) { 
    let maxIndex = multipliedValues.index(of: maxValue)!/(commonMultiple/numberOfSteps) 
    yValues[maxIndex] = maxValue 
}