2016-11-01 15 views
1

多くの質問と回答がありましたが、どちらも問題には当てはまりません。私は、配列b、cおよびdの値でソートしたいジャグ配列を持っている:C#でジグザグ配列を複数の列で並べ替える

string[][] toBeSorted = new string[][] { a, b, c, d, e, f, g, h, i, j}; 

私はArray.Sort(c.ToArray(), b)と同様のを試してみましたが、「行」

toBeSorted = toBeSorted.OrderBy(inner => inner[2]).ToArray(); 

によるこの唯一の種類私はtoBeSortedのように "John"、 "Smith"、 "New York"などの値を持つとき 私の配列を持っていたい"都市"、 "姓"でソートされ、たとえばb最後に配列gの値が返されます。値はa =名前、b =姓などです

私のシナリオでは.NET 3.5に依存しています。

ありがとうございます。

+2

*いくつかの例を教えてください。 'b'、' c'、d'配列内の値をソートしますか? –

+0

あなたの質問はあまり明確ではありません - あなたの例では "John"と "Smith"は2つの異なる配列ですか?配列に文字列しかない場合、姓でソートすることはどういう意味ですか? – barakcaf

+1

各配列は、プロパティを持つクラスに座る必要のあるデータを表しています。 –

答えて

4

代わりの内部配列内の各アイテムは、実際にデータの異なる「タグ」を表すstring[][]特性は、それらの「タグ」であると適切なクラスを作成する使用:次に

public class Person 
{ 
    public string Name { get; set; } 
    public string LastName { get; set; } 
    public string City { get; set; } 
} 

そして:

を@GiladGreen答えをFollwing
var people = new List<Person> 
{ 
    new Person { Name = "A", LastName = "1", City = "B" }, 
    new Person { Name = "B", LastName = "3", City = "B" }, 
    new Person { Name = "C", LastName = "2", City = "B" }, 
}; 

//Linq OrderBy: 
var result = people.OrderBy(p => p.LastName); 

//List Sort: 
people.Sort((x, y) => string.Compare(x.LastName, y.LastName)); 
+0

完璧な、ありがとう - 私の最後の質問は(ちょっと奇妙です) - どのようにソートされたvarから値を抽出するのですか? 'result'変数から? – baron

+0

@baron - 結果を抽出するのはどういう意味ですか? 'foreach(var i in result){objWriter.WriteLine(i.LastName);}' ..出力ファイルには何も書き込まれません。これはコレクションのため、 –

+0

を例として反復することができます。 。 – baron

3

、あなたは匿名型を使用して、新しいクラスを作成せずに同じことを達成できる(データが均一にフォーマットされたと仮定した場合):

var people= toBeSorted.select (p => new {Name = p[0], LastName = p[1], City = p[2]}); 

var sorted = people.OrderBy(p => p.LastName);