我正在尝试从XML文件中获取值并列出唯一的日期。 我在XML文件中获取日期,并且一天中有多个日期。
我想把所有这些日期都放成这样:
基本上,请对它们进行排序,并且最多要有一个相同的日期。
public static void ispisiAnalizuPoDanu()
{
List<Mjerenje> lMjerenja = UcitajMjerenja();
/* kreirati listu jedinstvenih datuma */
List<DateTime> jedinstveniDatumi = new List<DateTime>();
DateTime zadnji = new DateTime();
foreach (Mjerenje mjerenje in lMjerenja)
{
if (zadnji != mjerenje.datum)
{
jedinstveniDatumi.Add(mjerenje.datum);
}
zadnji = mjerenje.datum;
}
Console.WriteLine();
List<AnalizaPoDanu> analizePoDanima = new List<AnalizaPoDanu>();
foreach (DateTime datum in jedinstveniDatumi)
{
/* RAČUNANJE UKUPNOG BROJA MJERENJA */
int total = 0;
int zbroj = 0;
int mini = lMjerenja[0].vrijednost;
int maks = lMjerenja[0].vrijednost;
int prosjek = 0;
foreach (var mjerenje in lMjerenja)
{
if (mjerenje.datum == datum)
{
total = total + 1;
zbroj = zbroj + mjerenje.vrijednost;
if(mjerenje.vrijednost < mini)
{
mini = mjerenje.vrijednost;
}
if(mjerenje.vrijednost > maks)
{
maks = mjerenje.vrijednost;
}
}
}
prosjek = zbroj / total;
var analizaPoDanu = new AnalizaPoDanu(
datum,
total,
mini,
maks,
prosjek
);
analizePoDanima.Add(analizaPoDanu);
}
/*RAČUNANJE STANDARDNE DEVIJACIJE*/
Console.WriteLine("Prikaz svih mjerenja po danu: ");
var table = new ConsoleTable("Datum", "Total: ", "Min", "Max", "Prosjek: ");
foreach (AnalizaPoDanu mjerenje in analizePoDanima)
{
table.AddRow(mjerenje.Datum.ToString("dd.MM.yyyy"), mjerenje.Total, mjerenje.Min, mjerenje.Max, mjerenje.Prosjek);
}
table.Write();
Console.WriteLine();
}
数据样本:
<data>
<Mjerenja>
<Mjerenje id="1" vrijednost="3" dan="1" mjesec="1" godina="2018"></Mjerenje>
<Mjerenje id="2" vrijednost="4" dan="1" mjesec="1" godina="2018"></Mjerenje>
<Mjerenje id="3" vrijednost="5" dan="3" mjesec="1" godina="2018"></Mjerenje>
<Mjerenje id="4" vrijednost="6" dan="4" mjesec="1" godina="2018"></Mjerenje>
<Mjerenje id="5" vrijednost="7" dan="5" mjesec="1" godina="2018"></Mjerenje>
<Mjerenje id="6" vrijednost="8" dan="6" mjesec="1" godina="2018"></Mjerenje>
<Mjerenje id="7" vrijednost="9" dan="7" mjesec="1" godina="2018"></Mjerenje>
<Mjerenje id="8" vrijednost="10" dan="2" mjesec="1" godina="2018"></Mjerenje>
<Mjerenje id="9" vrijednost="5" dan="2" mjesec="1" godina="2018"></Mjerenje>
<Mjerenje id="10" vrijednost="7" dan="4" mjesec="1" godina="2018"></Mjerenje>
<Mjerenje id="11" vrijednost="2" dan="6" mjesec="1" godina="2018"></Mjerenje>
<Mjerenje id="12" vrijednost="4" dan="5" mjesec="1" godina="2018"></Mjerenje>
<Mjerenje id="13" vrijednost="12" dan="5" mjesec="1" godina="2018"></Mjerenje>
<Mjerenje id="14" vrijednost="10" dan="3" mjesec="1" godina="2018"></Mjerenje>
<Mjerenje id="15" vrijednost="2" dan="7" mjesec="1" godina="2018"></Mjerenje>
<Mjerenje id="16" vrijednost="3" dan="1" mjesec="1" godina="2018"></Mjerenje>
答案 0 :(得分:0)
尝试按照xml linq进行操作:
using System;
using System.Collections.Generic;
using System.Collections;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;
namespace ConsoleApplication94
{
class Program
{
const string FILENAME = @"c:\temp\test.xml";
static void Main(string[] args)
{
XDocument doc = XDocument.Load(FILENAME);
var results = doc.Descendants("Mjerenje").Select(x => new {
id = (string)x.Attribute("id"),
vrijednost = (int)x.Attribute("vrijednost"),
date = new DateTime((int)x.Attribute("godina"), (int)x.Attribute("mjesec"), (int)x.Attribute("dan"))
}).ToList();
var groups = results.GroupBy(x => x.date).ToList();
}
}
}
答案 1 :(得分:0)
假设您使用的是以下课程(我将使用英文名称,因此每个人都可以阅读):
class Measurement // Mjerenje
{
public double Value { get; set; }
public DateTime Date { get; set; }
}
class AnalysisPerDay // AnalizaPoDanu
{
public DateTime Date { get; set; }
public int Count { get; set; }
public double Min { get; set; }
public double Max { get; set; }
public double Average { get; set; }
}
,并且您已经阅读并将XML文件转换为列表:
List<Measurement> measurements = LoadMesaurements(); // UcitajMjerenja()
您可以按天分组并使用LINQ计算统计信息:
List<AnalysisPerDay> analysis = measurements.
GroupBy(m => m.Date)
.Select(g => new AnalysisPerDay {
Date = g.Key,
Count = g.Count(),
Min = g.Min(m => m.Value),
Max = g.Max(m => m.Value),
Average = g.Average(m => m.Value),
})
.ToList();
要理解该查询,请注意GroupBy
在参数IGrouping<DateTime, Measurement>
中创建类型为g
的组。
g
具有包含日期的Key
属性,并且是包含一天中所有测量值的IEnumerable<Measurement>
。