我有一个关于某些手机信息的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
我可以列出带有hashset的类型,但我不知道如何计算不同的颜色和类型的数量。
我的代码:
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();
}
}
}
答案 0 :(得分:1)
创建一个类来保存手机信息:
class PhoneInfo {
public string type;
public int size;
public string Color;
public string newOrUsed;
public int warrantyMonth;
public decimal price;
}
读入文本文件并创建List
个对象。我建议阅读String.Split
。
List<PhoneInfo> phones;
使用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()
};
答案 1 :(得分:0)
我无法打开您发送的链接,您可以使用hashset或任何其他数据结构,但我更喜欢使用匿名数据,即使您可以构建自己的类并解析数据。
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()
});