Sorting 按对象类型对对象数组进行排序(Icomparable?)
我想按对象类型对数组进行排序。所以所有的歌曲都在一起,所有的书都在一起,所有的电影都在一起 我正在读取一个文件并确定每个对象应该是什么。然后创建对象并将其添加到数组中 编辑:这是实际代码Sorting 按对象类型对对象数组进行排序(Icomparable?),sorting,Sorting,我想按对象类型对数组进行排序。所以所有的歌曲都在一起,所有的书都在一起,所有的电影都在一起 我正在读取一个文件并确定每个对象应该是什么。然后创建对象并将其添加到数组中 编辑:这是实际代码 static Media[] ReadData() { List<Media> things = new List<Media>(); try { String filePath = "resources/Data.txt"; string Line; int coun
static Media[] ReadData()
{
List<Media> things = new List<Media>();
try
{
String filePath = "resources/Data.txt";
string Line;
int counter = 0; // used to check if you have reached the max
number of allowed objects (100)
using (StreamReader File = new System.IO.StreamReader(filePath))
{
while ((Line = File.ReadLine()) != null)
{
在主代码中,我有以下内容:
Media[] mediaObjects = new Media[100];
Media[] temp = ReadData();
int input; // holds the input from a user to determin which action to take
for (int i = 0; i<temp.Length;i++){ mediaObjects[i] = temp[i]; }
谢谢你的建议。最后,我只是在阅读列表时重新设置了创建列表的方式。我为每个对象创建了多个列表,然后恰好每个列表都在主列表上,所以它显示为已排序。我希望在写这篇长文章之前我能弄明白
据我所知,您不能在泛型数组中按对象的类型进行排序。如果有人有更好的解决方案,请随意发布。所以我看到你有书籍、歌曲和电影类型 这是实现IComparable接口的一个典型案例——尽管您对要实现的接口名称的使用是正确的,但您没有正确地使用它 创建一个名为MediaObject的基类-这将是您创建的其他类型对象的主要基类。 添加所需的正确属性。在这种情况下,介质类型就是需要的类型。 让这个类实现IComparable来帮助您进行比较。 以正确的方式重写CompareTo方法 现在,您可以直接比较main方法中的MediaObject对象。
给我们看看你的代码。你试过什么吗?这不是一个写我的代码的网站。我尝试了一些方法,但我觉得我不知道应该从哪里开始。我已经尝试了这个mediaObjects.OrderByDescendingMedia,mediaObjects.GetType;为了能够排序,您需要能够比较对象,从而确定object1>object2还是object1==object2。如果对象是同一类型的,则通常会对其中的值进行比较。如果它们属于不同的类型,则必须实现自己的比较运算符。mediaObjects.orderbydegeneratingx=>x.GetType.ToString;这是我心中的想法,但这个程序是为了课堂作业,我们不允许编辑媒体对象类的代码,只有电影、歌曲和书籍类。这让事情变得更加困难。虽然我只是在使用扩展方法,但这确实有效。如果您为每个对象类型创建了一个扩展方法来比较它们的类型名(即字符串),该怎么办?
Media[] mediaObjects = new Media[100];
Media[] temp = ReadData();
int input; // holds the input from a user to determin which action to take
for (int i = 0; i<temp.Length;i++){ mediaObjects[i] = temp[i]; }
public int CompareTo(object obj)
{
if (obj == null)
{
return 1;
}
Song temp = obj as Song;
if (temp != null)
{
//Type is a string
return this.Type.CompareTo(temp.Type);
}
else
{
return 1;
}
}
public class MediaObject : IComparable
{
private string mediaType;
public string MediaType
{
get {return mediaType;}
set {mediaType=value;}
}
public MediaObject(string mType)
{
MediaType = mType;
}
int IComparable.CompareTo(object obj)
{
MediaObject mo = (MediaObject)obj;
return String.Compare(this.MediaType,mo.MediaType); //implement a case insensitive comparison if needed (for your research)
}
}