這需要一些我在 Dart 中還沒有的天才、經驗和知識,所以我正在尋求幫助。
我正在嘗試填充折線圖,當用戶第一次開始使用軟體時,圖表資料中會有“空”條目。也可能有“零”條目或在某些周或條目中根本沒有條目。我想確保基于始終顯示 13 個條目的圖表,我的折線圖顯示任何缺失條目的零(對于銷售收入 - yAxis)。
例如,mockupGraphData 將是一種現有情況,其中幾個銷售日期缺少條目(基于每周條目)并且沒有足夠的條目來滿足圖表需求。
我想自動輸入“歸零”日期。日期是缺失日期的索引,GraphData.yAxis(收入)為零。
下面無法編譯,當然,考慮的是什么,我認為最后的回圈偽代碼,如果我能得到周圍的mockupGraphData不存在該指數將作業...
void main() {
// Actual "mock" input data
List<GraphData> mockupGraphData = [
GraphData(1586761200000, 145333),
GraphData(1587366000000, 433343),
GraphData(1587970800000, 223432),
GraphData(1589180400000, 122221),
GraphData(1589785200000, 982347),
GraphData(1590994800000, 234322),
];
// Required graph dates as per below calculations (13 entries):
// 1583737200000
// 1584342000000
// 1584946800000
// 1585551600000
// 1586156400000
// 1586761200000
// 1587366000000
// 1587970800000
// 1588575600000
// 1589180400000
// 1589785200000
// 1590390000000
// 1590994800000
int entries = 13;
int latestDateReported = DateTime(2020, 6, 1).millisecondsSinceEpoch;
int oneWeek = Duration(days: 7).inMilliseconds;
int earliestEntryDate = latestDateReported - (oneWeek * entries);
List<int> graphRequiredDates = [];
List<GraphData> finalData = [];
for (int i = 0; i < entries; i ) {
earliestEntryDate = oneWeek;
graphRequiredDates.add(earliestEntryDate);
}
// What I would like to do
for (int i = 0; i < entries; i ) {
if (!mockupGraphData.contains(GraphData(graphRequiredDates[i]))) {
finalData.add(GraphData(graphRequiredDates[i], 0));
}
}
print(finalData);
}
class GraphData {
int xAxis; // Sale date
int yAxis; // Sale income
GraphData(this.xAxis, this.yAxis);
@override
String toString() {
return '$xAxis $yAxis';
}
}
// IDEAL OUTPUT:
List<GraphData> mockupGraphData = [
GraphData(1583737200000, 0),
GraphData(1584342000000, 0),
GraphData(1584946800000, 0),
GraphData(1585551600000, 0),
GraphData(1586156400000, 0),
GraphData(1586761200000, 145333),
GraphData(1587366000000, 433343),
GraphData(1587970800000, 223432),
GraphData(1588575600000, 0),
GraphData(1589180400000, 122221),
GraphData(1589785200000, 982347),
GraphData(1590390000000, 0),
GraphData(1590994800000, 234322),
];
uj5u.com熱心網友回復:
我將使用將時間戳映射到值mockupGraphData的List<GraphData>,而不是存盤為Map<int, int>。從那里,很容易迭代您的預期時間戳串列,檢查時間戳是否已存在于 中mockupGraphData,然后GraphData適當地構造物件。
您還可以使用 collection-for使您的一些代碼更整潔:
void main() {
// Actual "mock" input data
var mockupGraphData = <int, int>{
1586761200000: 145333,
1587366000000: 433343,
1587970800000: 223432,
1589180400000: 122221,
1589785200000: 982347,
1590994800000: 234322,
};
int entries = 13;
int latestDateReported = DateTime(2020, 6, 1).millisecondsSinceEpoch;
int oneWeek = Duration(days: 7).inMilliseconds;
int earliestEntryDate = latestDateReported - (oneWeek * (entries - 1));
List<int> graphRequiredDates = [
for (var i = 0; i < entries; i )
earliestEntryDate i * oneWeek,
];
List<GraphData> finalData = [
for (var requiredDate in graphRequiredDates)
GraphData(requiredDate, mockupGraphData[requiredDate] ?? 0),
];
finalData.forEach(print);
}
class GraphData {
int xAxis; // Sale date
int yAxis; // Sale income
GraphData(this.xAxis, this.yAxis);
@override
String toString() {
return 'GraphData($xAxis, $yAxis)';
}
}
uj5u.com熱心網友回復:
你可以嘗試這樣的事情:
void main() {
List<GraphData> mockupGraphData = [
GraphData(1586761200000, 145333),
GraphData(1587366000000, 433343),
GraphData(1587970800000, 223432),
GraphData(1589180400000, 122221),
GraphData(1589785200000, 982347),
GraphData(1590994800000, 234322),
];
int entries = 13;
int latestDateReported = DateTime(2020, 6, 1).millisecondsSinceEpoch;
int oneWeek = Duration(days: 7).inMilliseconds;
int earliestEntryDate = 1583737200000;
final result = [
for (int i = 0, v = 0; i < entries; i , earliestEntryDate = oneWeek)
if (mockupGraphData[v].xAxis == earliestEntryDate)
mockupGraphData[v ]
else
GraphData(earliestEntryDate, 0),
];
result.forEach(print);
}
class GraphData {
int xAxis; // Sale date
int yAxis; // Sale income
GraphData(this.xAxis, this.yAxis);
@override
String toString() {
return '$xAxis $yAxis';
}
}
我硬編碼了 的值,earliestEntryDate因為計算似乎與預期的輸出不匹配。上述解決方案假定mockupGraphData已排序,并且值至少相隔一周。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/344840.html
