[英]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
进行排序,请尝试以下操作:
dataOne = dataOne.OrderBy(x => x.Number).ToArray();
请记住添加名称空间System.Linq
来访问这些方法。
OrderBy
允许您传递表达式以对数据进行排序,它将返回IOrderedEnumerable
。 ToArray
会将其转换为array
。
如果您不被允许使用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.