从healthkit,我将收到一些数据,例如步骤数据。
我在服务器中保存了这个数据。然后我有一个数据数组:
1.- startDate,endDate,value
2.- startDate,endDate,value
等
我的服务器中可能有很多值。
然后我获取Healthkit中的值。我有很多价值观。服务器中的值和新值。
我想只向服务器上传新值。
我这样做:
for each value in my server {
for each value in healthkit{
if(startDate, endDate and value are not equal to the value in the server){
then save the value in the server
}
}
}
算法会起作用,但速度非常慢。我可以在两个系统中拥有很多值。他们中的大多数在两个地方都是一样的。
您知道如何做得更好吗?
我无法在healthKit中保存标记。
我正在使用带角度4和打字稿的离子。
答案 0 :(得分:0)
我认为我需要更多的背景来理解这个问题。通过" new"值,您是否包括已修改的条目,或仅包含已添加的新条目?
如果您只需要新值,并且它们被添加到客户端数组的末尾,那么您可以从数组的末尾获取它们。
const new_count = healthkit.length - myserver.length, // number of new entries
index_start = healthkit.length - new_count, // index in healthkit array where new entries start
new_values = healthkit.slice(index_start); // new array containing only new entries
addNewValues(new_values);
现在您将新值放在一个单独的数组中,您可以将它们更新到服务器。
如果您做需要更新已更改的值,则可以遍历两个阵列(仅一次,同时)并查找差异。我将假设两个数组的条目都在相同的索引中。我也假设"值" key是唯一要比较的键。您可以执行以下操作来查找已修改的值。
const modified_values = [];
myserver.forEach(function(entry, i) { // iterate over server array
let healthkit_entry = healthkit[i]; // get healthkit entry with same index
if(entry.value !== healthkit_entry.value) { // see if value has changed
modified_values.push(healthkit_entry); // if changed, add to modified array
}
});
updateModifiedValues(modified_values);
现在,modified_values数组包含了来自healthkit数组的所有已修改条目。
答案 1 :(得分:0)
这个答案假定服务器上的数据和healthKit中的数据以相同的方式排序,或者您可以对它们进行排序而不会影响其他任何内容。
例如,您可以通过StartDate对服务器上的数据和来自healthKit的数据进行排序,通过EndDate对连接进行分类,然后按值断开连接。
现在您有两个要合并的已排序数组。我们的想法是使用合并排序explained here.
的合并功能您最终会得到一个包含所有数据但不重复的数组,您可以将其保存在服务器上。
修改强>
void mergeArrays(int arr1[], int arr2[], int n1,
int n2, int arr3[])
{
int i = 0, j = 0, k = 0;
// Traverse both array
while (i<n1 && j <n2)
{
// Check if current element of first
// array is smaller than current element
// of second array. If yes, store first
// array element and increment first array
// index. Otherwise do same with second array
if (arr1[i] < arr2[j])
arr3[k++] = arr1[i++];
else if (arr2[j] < arr1[i])
j++;
else
j++,i++;
}
// Store remaining elements of first array (healthKit Array)
while (i < n1)
arr3[k++] = arr1[i++];
}