簡體   English   中英

如何計算所列項目?

[英]How to count the listed items?

我有一個txt文件,其中包含有關某些手機的信息。

Type;Size;Color;New-OrUsed;Warrantee(month);Price(HUF) 

iPhone SE;64;Gold;New;0;95000
iPhone 6S;64;Silver;New;3;130000
iPhone 5S;16;Black;New;5;60000
iPhone 5S;32;Gold;New;6;75000
iPhone 5S;32;RoseGold;New;8;66500
iPhone 7;32;Black;Used;10;135000
iPhone X;256;Silver;New;12;400000
iPhone 6S;128;Silver;New;3;173000
iPhone 8;128;Gold;New;12;256000
iPhone 7;64;Red;Used;4;155000
iPhone 8 Plus;64;Silver;New;4;285000
iPhone 6S Plus;64;Black;Used;8;180000
iPhone 7 Plus;32;Red;Used;6;192000

我想列出所有這些,如下所示:

類型(無論有多少,都只有一次);這種類型的文本有多少; 這種類型的文字有多少種顏色

iPhone 5S;3;3

我可以用哈希集列出類型,但是我不知道如何計算不同的顏色以及類型的數量。

我的代碼:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using System.Collections;

namespace nyilvantartas
{
    class Program
    {
        struct adatok
        {
            public string tipus, szin, allapot;
            public int meret, garancia, ar;
        }

        static void Main(string[] args)
        {
            StreamReader f = new StreamReader("termekek.txt", Encoding.Default);
            HashSet<string> tipusok = new HashSet<string>();
            List<int> hanyvan = new List<int>();
            string[] hanyvann = new string[20];
            string s;
            string[] ss = new string[4];
            adatok[] adatok = new adatok[1000];
            int db = 0;
            s = f.ReadLine();
            while (!f.EndOfStream)
            {
                s = f.ReadLine();
                ss = s.Split(';');
                adatok[db].tipus = ss[0];
                adatok[db].meret = int.Parse(ss[1]);
                adatok[db].szin = ss[2];
                adatok[db].allapot = ss[3];
                adatok[db].garancia = int.Parse(ss[4]);
                adatok[db].ar = int.Parse(ss[5]);
                db++;
            }
            f.Close();
            int ezustar = 0, gari=0;
            double legolcsobb = 500000,legdragabb=0;
            for (int i = 0; i < db; i++)
            {
                tipusok.Add(adatok[i].tipus);
                if (adatok[i].szin=="Silver")
                {
                    ezustar += adatok[i].ar;
                }
                if (adatok[i].ar>legdragabb)
                {
                    legdragabb = adatok[i].ar;
                }
                if (adatok[i].ar<legolcsobb)
                {
                    legolcsobb = adatok[i].ar;
                }
                gari += adatok[i].garancia;
            }
            legdragabb /= legolcsobb;
            gari /= db;
            string[] tipusokk = new string[13];
            for (int i = 0; i < db; i++)
            {
                tipusok.Add(adatok[i].tipus);

            }
            for (int i = 0; i < db; i++)
            {
                hanyvann[i] = adatok[i].tipus;

            }


            Console.WriteLine("2.Feladat: {0} db iPhone található a listában.",+db);
            Console.WriteLine("3.Feladat: Az összes ezüst színű készülék {0} Ft-ba kerülne",+ezustar);
            Console.WriteLine("4.Feladat:");
            foreach (var item in tipusok)
            {
                Console.WriteLine(item);
            }
            Console.WriteLine("5.Feladat: Átlagossan {0} hónap garanciát kapunk",gari);
            Console.WriteLine("6.Felaadat: {0}-szor kerül többe a legdrágább a legolcsóbbnál.",legdragabb);

            Console.ReadKey();
        }
    }
}
  1. 創建一個類來保存電話信息:

     class PhoneInfo { public string type; public int size; public string Color; public string newOrUsed; public int warrantyMonth; public decimal price; } 
  2. 讀入文本文件並創建對象List 我建議閱讀有關String.Split

     List<PhoneInfo> phones; 
  3. 使用LINQ查詢List

     var phoneCounts = from p in phones group p by p.type into pg select new { type, countOfType = pg.Count(), countOfColors = pg.Select(p => p.color).Distinct().Count() }; 

我無法打開您發送的鏈接,可以使用哈希集或任何其他數據結構,但是我更喜歡使用匿名數據,即使您可以構建自己的類並解析數據。

        var rawData = System.IO.File.ReadAllText("aa.txt");
        var data = rawData.Split(new[] {Environment.NewLine}, StringSplitOptions.None).Select(k =>
            { var segments = k.Split(';');
           return new
            {
                Type = segments[0],
                Size = segments[1],
                Color = segments[2],
                IsNew = segments[3],
                Warranty = segments[4],
                Price = segments[5]
            };});
        var report = data.GroupBy(k => k.Type).Select(p =>
            new
            {
                Type = p.Key,
                TypesCount = p.Count(),
                ColorVarityCount = p.Select(o => o.Color).Distinct().Count()
            });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM