繁体   English   中英

C#类/对象传递(对象数组)

[英]C# Class/Object passing (Array of Objects)

是的,所以我有一个用于存储一组值的类

public class dataSet
 {
  public int Number;
  public double Decimal;
  public string Text;
  //etc...
 }

然后我做了一个数组dataSet类型

public static dataSet[] dataOne = new dataSet[100];

我正在尝试对与存储在dataSet中的int Number中存储的值相关的dataOne数组进行排序。 我已经准备好排序算法,但是我正努力传递仅存储在dataOne.Number中的值,因此最终它只是我传递给排序的整数数组。 我对编程一无所知,因此不胜感激。

编辑:

我需要通过将它传递到dataOne.Number数组中来调用排序函数(如果可能)? 因此,它基本上只是将sort函数传递给int[]

给您已经有数据到名为dataOne的数组中,可以尝试:

Linq解决方案

使用linq进行排序,请尝试以下操作:

dataOne = dataOne.OrderBy(x => x.Number).ToArray();

请记住添加名称空间System.Linq来访问这些方法。

OrderBy允许您传递表达式以对数据进行排序,它将返回IOrderedEnumerable ToArray会将其转换为array

不是Linq解决方案

如果您不被允许使用Linq。 您可以实现一个实现IComparer<T>的类,并实现具有两个泛型参数的Compare方法。 使用此比较器类型的实例对数据进行排序。

对于示例,由于定义了dataSet类型,因此可以实现比较器:

public class DataSetComparer : IComparer<dataSet>
{
    public int Compare(dataSet x, dataSet y)
    {
        // define the logic to sort here...
        return x.Number.CompareTo(y.Number);
    }
}

然后,在Array.Sort方法上使用比较器:

Array.Sort(dataSet, new NumberComparer());

它将订购您的数据集。

我不确定为什么您不能使用Linq。 但这迫使您执行以下操作:

var numberValues = new List<int>();
foreach(var dataItem in dataOne)
{
    numberValues.Add(dataItem.Number);
}

然后,您可以将numberValues.ToArray()传递给您的sort方法。

与Linq一起

dataOne.Select(d => d.Number).ToArray()

您应该让数据集实现IComparable,这样您就可以轻松实现...

dataOne = dataOne.OrderBy(x => x).ToArray();

要么...

Array.Sort(dataOne);

这是实现IComparable的方法...

public class dataSet : IComparable
{
    public int Number;
    public double Decimal;
    public string Text;

    public int CompareTo(object obj)
    {
        if (obj == null)
            return 1;
        dataSet other = obj as dataSet;
        if (other != null) 
            return this.Number.CompareTo(other.Number);
        else
            throw new ArgumentException("Object is not a dataSet");
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM