C# 在C中存储和排序数据的最佳方法#

C# 在C中存储和排序数据的最佳方法#,c#,simulation,C#,Simulation,我正在构建一个程序,将在6组数字上运行10000次迭代。这些数字经过迭代后,按照以下方式进行计算和排序 *_Set1_****_Set2_****_Set3_****_Set4_****_Set5****_Set6_* ********************************************************* **DESC******DESC******DESC******DESC******DESC*****DESC** ************************

我正在构建一个程序,将在6组数字上运行10000次迭代。这些数字经过迭代后,按照以下方式进行计算和排序

*_Set1_****_Set2_****_Set3_****_Set4_****_Set5****_Set6_*
*********************************************************
**DESC******DESC******DESC******DESC******DESC*****DESC**
*********************************************************
其中Set(n)是一组数字,DESC是数字的降序

我试过做一个
列表
。但是我对
列表非常不熟悉,我甚至不确定它是否是我要找的。我将给您举一个例子,说明我如何处理
列表

//Created a Output Class for Sim
 public class MC_OUT
    {

       public double output;
       public double OOIP;
       public double OGIP;
       public double EURO;
       public double EURG;
       public double rAREA;
       public double calcEURO;
       public double calcEURG;

        public MC_OUT(double output, double OOIP, double OGIP, double EURO, double EURG, double rAREA, double calcEURO, double calcEURG) { 
        this.output = output;
        this.OOIP = OOIP;
        this.OGIP = OGIP;
        this.EURO = EURO;
        this.EURG = EURG;
        this.rAREA = rAREA;
        this.calcEURO = calcEURO;
        this.calcEURG = calcEURG;


        }

//Declared list before Monte Carlo Sim.
List<MC_OUT> mcout = new List<MC_OUT>();


//Ran Code to Perform Calculations
//Then Executed this at End
 if (OOIP >= 0 && OGIP >= 0)
        {
            mcout.Add(new MC_OUT(NormSInv((i - .5) / iter), OOIP, OGIP, EURO, EURG, rAREA, EURO / (rAREA * rNET_H * rGCF) * 1000, EURG / (rAREA * rNET_H * rGCF) * 1000));
        }
//Then I got confused and couldn't figure out how to sort and then access the needed
 //information
//为Sim卡创建了一个输出类
公共类MC_OUT
{
公共双产出;
公共双OOIP;
公共双OGIP;
公共双欧元;
公共双欧元;
公共双稀有;
公共双卡塞罗;
公共双卡尔塞堡;
公共MC_OUT(双输出,双输出,双输出,双输出,双输出,双欧元,双欧元,双欧元,双rAREA,双calcEURO,双calcEURG){
这个。输出=输出;
this.OOIP=OOIP;
this.OGIP=OGIP;
欧元=欧元;
this.EURG=EURG;
this.rAREA=rAREA;
this.calcEURO=calcEURO;
this.calcEURG=calcEURG;
}
//Monte Carlo Sim前声明的列表。
List mcout=新列表();
//运行代码以执行计算
//然后在最后执行这个
如果(OOIP>=0&&OGIP>=0)
{
mcout.Add(新的mcout(正常值((i-.5)/iter)、OOIP、OGIP、欧元、欧元、rAREA、欧元/(rAREA*rNET\U H*rGCF)*1000、欧元/(rAREA*rNET\U H*rGCF)*1000);
}
//然后我感到困惑,不知道如何排序,然后访问所需的数据
//信息
所以我想在这些垃圾之后,我的主要问题是什么是存储这些信息的最有效的方法,有人能告诉我一个合适的教程吗


谢谢!

现在您已经创建了一个列表,您可以通过索引访问数据。例如:

var firstRecord = mcout[0];
var firstEURO = firstRecord.EURO;
或:

如果要对数据进行排序,可以这样简单

var sortedData = mcout.Orderby(x => x.OOIP);
以上内容将根据您当前拥有的一个属性对数据进行排序。如果您需要对其进行不同的排序,您可能需要考虑向对象添加另一个更适合排序的属性

使用foreach循环或for循环也很容易枚举数据

foreach (var mc in mcout)
{
    var euro = mc.EURO;
}

for (int i = 0; i < mcout.Count; i++)
{
    var euro = mcout[i].EURO;
}
foreach(var mc in mcout)
{
var欧元=百万欧元;
}
for(int i=0;i

收藏是一种应用非常广泛的东西,有很多种类型!!你会想了解它们,以及如何使用它们。如果你用谷歌搜索C#Collections,你会得到很多信息/教程。下面是一个例子。我可以继续介绍如何访问和使用它们,但确实有很多东西需要你深入了解并开始学习通过网络上的信息来访问它。希望上面的例子和我给你的链接能让你开始!干杯!

@jsmith好的,程序需要在以后访问它,因为这些数字依赖于另一个计算。我不明白你在尝试做什么。你在尝试循环列表时遇到问题吗,或者使用列表进行一些计算,或者什么?如果您的列表应该是一组N值,那么有一个元组类可能更适合您的情况。@KendallFrey为我的含糊不清感到抱歉。我试图解释我自己时遇到了困难,所以会出现混乱。每组将包含10000个数字,这些数字是用我漏掉了。在这个集合中,我需要按降序排列数字。我正在查看元组类。这可能是我需要的。感谢您的评论!如果您需要确保数据始终排序,为什么不使用?它将始终为您保持列表的排序。但是它有一个类似于
字典的界面de>所以请注意这一点。因此,您将无法像常规列表那样通过索引访问项目,而只能通过排序键进行访问。@Jeffmerca提供了很好的注释。我甚至不知道它的存在。我将确定这一点。
SortedList
看起来非常有希望。我明白了……现在我可以在每个集合上执行此操作了吗(因为我需要按降序排列每套)并为每一组分配自己的
var
?我将如何访问该var中的数字?啊,你给了我无数的信息。我将立即使用它。谢谢你的时间。@ThundaUp任何时候都可以为雷霆粉丝们提供帮助!我必须照顾好我的俄克拉何马州同胞。我真希望我有权投票支持comments。一路打雷。明年NBA总冠军!
foreach (var mc in mcout)
{
    var euro = mc.EURO;
}

for (int i = 0; i < mcout.Count; i++)
{
    var euro = mcout[i].EURO;
}