我想按对象类型对anarray进行排序。所以所有的歌都在一起,所有的书都在一起,所有的电影都在一起。
我正在读取文件并确定每个对象应该是什么。然后创建对象并将其添加到数组中。
编辑:这是实际的代码。
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)
{
这是创建每个对象的位置。文件 然后,在行的开头搜索关键字 创建相应的对象。它将分裂 关于对象第一行的信息和意志 读取每一行,直到找到“ - ”字符 将每一行传递到摘要中。然后是摘要 解密后,将创建的对象传递给 数组列表。最后,如果数组列表达到100,那么 将打印“您已达到最大对象数”和 停止阅读文件。
if (Line.StartsWith("BOOK"))
{
String[] tempArray = Line.Split('|');
//foreach (string x in tempArray){Console.WriteLine(x);} //This is used
for testing
Book tempBook = new Book(tempArray[1],
int.Parse(tempArray[2]), tempArray[3]);
while ((Line = File.ReadLine()) != null)
{
if (Line.StartsWith("-")){break;}
tempBook.Summary = tempBook.Summary + Line;
}
tempBook.Summary = tempBook.Decrypt();
things.Add(tempBook);
counter++;
}
else if (Line.StartsWith("SONG"))
{
String[] tempArray = Line.Split('|');
//foreach (string x in tempArray)
{Console.WriteLine(x);} //This is used for testing
Song tempSong = new Song(tempArray[1],
int.Parse(tempArray[2]), tempArray[3], tempArray[4]);
things.Add(tempSong);
counter++;
}
else if (Line.StartsWith("MOVIE"))
{
String[] tempArray = Line.Split('|');
//foreach (string x in tempArray)
{Console.WriteLine(x);} //This is used for testing
Movie tempMovie = new Movie(tempArray[1],
int.Parse(tempArray[2]), tempArray[3]);
while ((Line = File.ReadLine()) != null)
{
if (Line.StartsWith("-")) { break; }
tempMovie.Summary = tempMovie.Summary + Line;
}
tempMovie.Summary = tempMovie.Decrypt();
things.Add(tempMovie);
counter++;
}
if (counter == 100)
{
Console.WriteLine("You have reached the maximum number of media
objects.");
break;
}
}
File.Close();
}
}
return things.ToArray(); // Convert array list to an Array and return the
array.
}
在主要代码中,我有这个:
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]; }
我希望mediaObjects数组按照什么类型的对象排序。
我还使用了Icomparable来做一个arrayList.sort(),但仍然没有运气。
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;
}
}
答案 0 :(得分:1)
所以我看到你有BOOK,SONG和MOVIE类型。
这是实现IComparable接口的经典案例 - 虽然您对要实现的接口名称是正确的,但您没有正确使用它。
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) } }
答案 1 :(得分:0)
感谢您的建议。我最后只是重新格式化我在阅读时创建列表的方式。我为每个对象创建了多个列表,然后每个对象都发生在主列表中,因此它显示为已排序。我希望在我做这篇长篇文章之前想出来。
据我所知,您无法按通用数组中的对象类型进行排序。如果有人有更好的解决方案,请随时发布。