0

私はC#にかなり慣れていません

外部データソースからいくつかの情報を取得して配列に保存しようとしています.配列に入ったら、時間で並べ替えたいと思います.

行の 1 列だけでこれを行う方法は知っていますが、必要な情報には複数の列があります。

例えば:

foreach (Appointment Appoint in fapts)
{
    // Store Appoint.Subject, Appoint.Start, Appoint.Organiser.Name.ToString(), Appoint.Location in an array
} 

// Sort my array by Appoint.Start

foreach ( item in myNewArray ) 
{
    //print out Appoint.Subject - Appoint.Start, Appoint.Organiser.Name.ToString() and Appoint.location
}

助けてくれて本当にありがとうございます。

編集:

これを取り込む複数のデータ ソースがあります。

foreach (Appointment Appoint in fapts)
{
    // Store Appoint.Subject, Appoint.Start, Appoint.Organiser.Name.ToString(), Appoint.Location in an array
} 

したがって、新しい配列でアイテムを並べ替える必要があります。これはあまり効率的ではないことはわかっていますが、必要な情報を他の方法で取得する方法はありません。

4

6 に答える 6

3

以下に示すように、 LINQの並べ替え演算子OrderByとを使用してリストを並べ替えることができThenByます。

using System.Linq;

その後...

var appointments = new List<Appointment>();
var sortedAppointments = list.OrderBy(l => l.Subject).ThenBy(l => l.Name).ToList();

これにより、予定の新しいリストが作成され、件名、名前の順に並べ替えられます。

于 2013-10-03T08:01:05.210 に答える
2

あなたの最終的な目的が何であるかは不明ですが、

List配列の代わりにジェネリックを使用します。

a の使用が推奨される理由の詳細については、このSO の質問Listを参照してください。

List<Appointment> appointments = new List<Appointment>();

foreach (Appointment Appoint in fapts)
{
    appointments.Add(Appoint);
} 

foreach (var item in appointments) 
{
    Console.WriteLine(item.Subject);
    Console.WriteLine(item.Foo);
    // Here you could override ToString() on Appointment to print eveything in one Console.WriteLine
}

コードの目的が時間順に並べ替えることである場合は、次のことを試してください。

var sortedAppointments = fapts.OrderBy(a => a.Start); // assuming Start is a DateTime property of `Appointment`.
于 2013-10-03T07:57:23.617 に答える
0

データが概念的に 1 行の複数の列である場合は、配列の代わりに辞書オブジェクトを検討してください。

foreach(KeyValuePair<string, string> entry in MyDic)
{
    // do something with entry.Value or entry.Key
}
于 2013-10-03T07:56:20.647 に答える
-1

幅広いオプションがあります。最も一般的なのは次の 2 つです。

1)クラスを作成し、そのクラスの配列またはリストを定義して、それを入力します

2)データ形式に一致する構造を作成し、その配列またはリストを作成します

もちろん、データを XML 形式またはデータセットに入れることもできますが、それはおそらく必要以上の作業です。

public List<foo> appointments = new List<foo>(); 
public struct foo
{
public string subject ;
public DateTime start ;
public string name ;
public string location ;
}
public void foo1()
{
// parse the file
while (!File.eof())
    {
        // Read the next line...
        var myRecord = new foo() ;
        myRecord.subject = data.subject ;
        myRecord.start = data.Start ;
        myRecord.name = data.Name ;
        //...
        appointments.Add(myRecord);
    }
}

楽しみ

(コメントやコメントへの返信ができないため、彼がクラスなどを持っているのか、それとも彼がやりたいことを私たちに示しているだけなのかは明らかではありませんでした.データがどのように読み取られているかについての情報. 彼がすでにそれをクラスに入れることができた場合, とにかく最初の答えが適用された. 私はそこに最後の2つを投げました. それらは最初にデータを取得するためのオプションだったからです.)

于 2013-10-03T07:56:38.570 に答える