我想要做的是按照最后一个参数(Niva)中的输入顺序对每个结构(Säljare1 - Säljare6)进行排序,因此如果Salesman1& 2(Säljare1& 2)已达到Niva(Level)的销售额100样品,然后将显示Säljare1和2的统计数据,然后是“这么多推销员已达到Niva 2。”
那么,我如何指示程序选择参数Niva的排序?
public struct Säljare6
{
public String Namn;
public String Personnummer;
private String Distrikt;
private int AntalArtiklar;
private int Niva;
public string NAMN
{
get { return Namn; }
set { Namn = value; }
}
public string PERSONNUMMER
{
get { return this.Personnummer; }
set { this.Personnummer = value; }
}
public String DISTRIKT
{
get { return Distrikt; }
set { Distrikt = value; }
}
public int ANTALARTIKLAR
{
get { return AntalArtiklar; }
set { AntalArtiklar = value; }
}
public int NIVA
{
get { return Niva; }
set { Niva = value; }
}
public Säljare6(string Namn6, string Personnummer6, string Distrikt6, int AntalArtiklar6, int Niva6)
{
this.Namn = Namn6;
this.Personnummer = Personnummer6;
this.Distrikt = Distrikt6;
this.AntalArtiklar = AntalArtiklar6;
this.Niva = Niva6;
}
public void SkrivUtInfo()
{
Console.WriteLine("Namn = {0} && Personnummer = {1} && Distrikt = {2} && AntalArtiklar = {3} && Niva = {4}", this.Namn, this.Personnummer, this.Distrikt, this.AntalArtiklar, this.Niva);
}
}
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Var Vänlig och skriv in info för säljaren (1,Namn (enter),2, persnr (enter),3, Distrikt(enter),4, AntalArtiklar (enter), 5,Niva 1-4(enter)");
Säljare1 S1 = new Säljare1(Console.ReadLine(), Console.ReadLine(), Console.ReadLine(), Convert.ToInt32(Console.ReadLine()), Convert.ToInt32(Console.ReadLine()));
Console.WriteLine("Var Vänlig och skriv in info för nästa säljare (1,Namn (enter), 2,persnr (enter), 3,Distrikt(enter), 4,AntalArtiklar (enter), 5,Niva 1-4(enter)");
Säljare2 S2 = new Säljare2(Console.ReadLine(), Console.ReadLine(), Console.ReadLine(), Convert.ToInt32(Console.ReadLine()), Convert.ToInt32(Console.ReadLine()));
Console.WriteLine("Var Vänlig och skriv in info för nästa säljare (1,Namn (enter), 2,persnr (enter), 3,Distrikt(enter), 4,AntalArtiklar (enter), 5,Niva 1-4(enter)");
Säljare3 S3 = new Säljare3(Console.ReadLine(), Console.ReadLine(), Console.ReadLine(), Convert.ToInt32(Console.ReadLine()), Convert.ToInt32(Console.ReadLine()));
Console.WriteLine("Var Vänlig och skriv in info för nästa säljare (1,Namn (enter), 2,persnr (enter), 3,Distrikt(enter), 4,AntalArtiklar (enter), 5,Niva 1-4(enter)");
Säljare4 S4 = new Säljare4(Console.ReadLine(), Console.ReadLine(), Console.ReadLine(), Convert.ToInt32(Console.ReadLine()), Convert.ToInt32(Console.ReadLine()));
Console.WriteLine("Var Vänlig och skriv in info för nästa säljare (1,Namn (enter), 2,persnr (enter), 3,Distrikt(enter), 4,AntalArtiklar (enter), 5,Niva 1-4(enter)");
Säljare5 S5 = new Säljare5(Console.ReadLine(), Console.ReadLine(), Console.ReadLine(), Convert.ToInt32(Console.ReadLine()), Convert.ToInt32(Console.ReadLine()));
Console.WriteLine("Var Vänlig och skriv in info för nästa säljare (1,Namn (enter), 2,persnr (enter), 3,Distrikt(enter), 4,AntalArtiklar (enter), 5,Niva 1-4(enter)");
Säljare6 S6 = new Säljare6(Console.ReadLine(), Console.ReadLine(), Console.ReadLine(), Convert.ToInt32(Console.ReadLine()), Convert.ToInt32(Console.ReadLine()));
S1.SkrivUtInfo();
S2.SkrivUtInfo();
S3.SkrivUtInfo();
S4.SkrivUtInfo();
S5.SkrivUtInfo();
S6.SkrivUtInfo();
答案 0 :(得分:0)
正如其他人已经说过的,看起来你创建了几个相同结构的结构。
这是一个示例类,它实现了IComparable接口,允许您使用List.Sort方法。
resolvers += "BeDataDriven" at https://nexus.bedatadriven.com/content/groups/public",
libraryDependencies += "org.renjin" % "renjin-script-engine" % "0.8.1886"
试一试:
public class MyObject : IComparable
{
public MyObject(string name, int level)
{
Name = name;
Level = level;
}
public string Name { get; }
public int Level { get; }
public override string ToString()
{
return $"{Name}, level {Level}";
}
public int CompareTo(object obj)
{
var myObj = obj as MyObject;
if (myObj == null) return -1;
int compare = Level.CompareTo(myObj.Level);
if (compare != 0) return compare;
// objects are in the same order
// order by name
return string.Compare(Name, myObj.Name, StringComparison.Ordinal);
}
}
答案 1 :(得分:0)
从您的代码中可以看出,您已为每个销售人员声明了一个单独的类。您不应该这样做,因为类描述/定义类型的事物 不 特定事物。
您可以使用列表<>为了这。下面的代码显示了两种方法,一种只使用for和foreach,另一种使用' LINQ'与lambdas(第一个例子)对初学者来说可能有点过于先进,但我认为它是如此有用,知道即使是初学者也应该知道可以用它做些什么。
using System.Collections.Generic;
using System.Linq;
class Program
{
static void Main(string[] args)
{
List<Säljare> salesmen = new List<Säljare>();
var nivaMax = 0;
for (int i = 0; i < 6; i++)
{
Console.WriteLine("Var Vänlig och skriv in info för säljaren (1,Namn (enter),2, persnr (enter),3, Distrikt(enter),4, AntalArtiklar (enter), 5,Niva 1-4(enter)");
var saljare = new Säljare(Console.ReadLine(), Console.ReadLine(), Console.ReadLine(), Convert.ToInt32(Console.ReadLine()), Convert.ToInt32(Console.ReadLine()));
nivaMax = Math.Max(nivaMax , saljare.NIVA);
salesmen.Add(saljare);
}
//We're telling the GroupBy method what we want to 'group by'
//this is the 'LINQ' part.
foreach (var nivaGruppe in salesmen.GroupBy(x => x.NIVA))
{
var groupNivå = nivaGruppe.Key;
var howManyInGroup = nivaGruppe.Count();
Console.WriteLine("{0} salesmen have reached nivå {1}", howManyInGroup, groupNivå);
}
Console.WriteLine("------------------------------------------");
for (int level = 0; level < nivaMax; level++)
{
var salesmenAtLevel = 0;
foreach (Säljare saljare in salesmen)
{
if (saljare.NIVA == level)
{
salesmenAtLevel++;
}
}
if (salesmenAtLevel > 0)
{
Console.WriteLine("{0} salesmen have reached nivå {1}", salesmenAtLevel, level);
}
}
Console.ReadKey(true);
}
}
这是您可以通过文章计算来计算等级的一种方式。
public int NIVA
{
get
{
return System.Math.Ceiling(AntalArtiklar / 100.0);
}
}
另一种方式:
public int NIVA
{
get
{
if( this.AntalArtiklar <= 49) return 1;
if( this.AntalArtiklar <= 99) return 2;
if( this.AntalArtiklar <= 199) return 3;
if( this.AntalArtiklar > 199) return 4;
}
}