【问题标题】:Unique dates from list列表中的唯一日期
【发布时间】:2019-06-08 20:02:16
【问题描述】:

我正在尝试从 XML 文件中获取值并列出唯一日期。 我在 XML 文件中获取日期,并且一天中有多个日期。

  1. 01.01.2018.
  2. 01.01.2018.
  3. 01.02.2018。
  4. 01.02.2018.
  5. 01.03.2018。
  6. 01.03.2018.
  7. 01.04.2018。
  8. 01.04.2018.

我想把所有这些日期都写成这样:

  1. 01.01.2018.
  2. 01.02.2018.
  3. 01.03.2018.
  4. 01.04.2018.

基本上,按顺序对它们进行排序,不要有多个相同的日期。

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>    

【问题讨论】:

  • 真正简单地使用 XML Linq(网络中最新版本的 xml 解析器)。需要查看xml文件示例。
  • 很抱歉这么愚蠢地发布问题...
  • 我在问题中添加了 XML 文件
  • 您可以查看此示例dotnetfiddle.net/fi2row
  • 只是一个提示,下次您包含日期样本时。您可能想解释一下您的日期写成日、月、年,并用点作为分隔符。每个人都有不同的日期格式。您可能还想提供“vrijednost”、“dan”、“mjesec”和“godina”的英文翻译。 “godina”一个是,我猜是“年”

标签: c# arrays xml list


【解决方案1】:

尝试以下 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();
        }
    }
}

【讨论】:

    【解决方案2】:

    假设你正在使用以下类(我将使用英文名称,所以每个人都可以阅读):

    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 在参数g 中创建IGrouping&lt;DateTime, Measurement&gt; 类型的组。

    g 有一个包含日期的Key 属性,并且是一个包含一天所有测量值的IEnumerable&lt;Measurement&gt;

    【讨论】:

      猜你喜欢
      • 2023-02-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-11
      • 2022-01-23
      • 1970-01-01
      • 2011-11-24
      • 2014-05-17
      相关资源
      最近更新 更多