[英]Add missing values to a list in xamarin forms
我有一個自定義對象列表,其中包含月份和另一個int值。 我從數據庫中獲取此列表。 因此,來自Web服務的數據為JSON。 有時月份不是連續的。 有時一些月會失蹤。 例如,如果這是第7個月,
然后列表中的月份可能包含這樣的內容。 {1,2,3,6,7}
所以我想補充4,5的遺漏月份---- {1,2,3,4,5,6,7}
其他值應為0(NEW_REC_COUNT)
我的對象類
public class NewData
{
public int MONTH { get; set; }
public int NEW_REC_COUNT { get; set; }
}
示例Json
[
{
"MONTH": 1,
"NEW_REC_COUNT": 19
},
{
"MONTH": 2,
"NEW_REC_COUNT": 5
},
{
"MONTH": 3,
"NEW_REC_COUNT": 2
},
{
"MONTH": 6,
"NEW_REC_COUNT": 9
},
{
"MONTH": 7,
"NEW_REC_COUNT": 3
}
]
您可以嘗試以下方法,
使用Select
從列表中選擇所有月份(int值)
var months = NewDataList.Select(x => x.MONTH); // This will give you all integers ie MONTHs.
從幾個月中查找Max()
並從1... maxMonths
創建范圍
var maxMonths = months.Max(); var oneTomaxMonths = Enumerable.Range(1,maxMonths).ToList();
現在你已經2所列出,即months
和oneToMaxMonths
,使用除來自新數據的清單得到失蹤月
var results = oneTomaxMonths.Except(months);
Foreach結果使用NEW_REC_COUNT = 0
創建新實例
POC: .net小提琴
如果沒有大量的數據,你可以嘗試smiple 環和Insert
省略的項到列表:
List<NewData> list = ...
// If list is not guarantee to be sorted
list.Sort((a, b) => a.MONTH.CompareTo(b.MONTH));
for (int i = 0; i < list.Count - 1; ++i) {
NewData current = list[i];
NewData next = list[i + 1];
// Do we have a hole at position i + 1?
if (current.MONTH + 1 < next.MONTH) {
list.Insert(i + 1, new NewData() {
MONTH = current.MONTH + 1, // Omitted month
NEW_REC_COUNT = 0, // Default value
});
}
}
編輯:如果我們想要從1
開始的月份,包括當前月份( DateTime.Today.Month
),我們可以使用Linq :
using System.Linq;
...
List<NewData> list = ...
// Let's generalize a bit if you want, say Q3 period
int fromMonth = 1;
int upToMonth = DateTime.Today.Month; // or 7 for testing
list = Enumerable
.Range(fromMonth, upToMonth - fromMonth + 1)
.Select(month =>
list.FirstOrDefault(item => item.MONTH == month)
?? new NewData() { MONTH = month, // Omitted month
NEW_REC_COUNT = 0 }) // Default value
.ToList();
如果要修改現有 list
:
list.AddRange(Enumerable
.Range(fromMonth, upToMonth - fromMonth + 1)
.Where(month => !list.Any(item => item.MONTH == month))
.Select(month => new NewData() {
MONTH = month,
NEW_REC_COUNT = 0 })
.ToArray());
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.