2013-12-03 61 views
1

從文件加載的數據進行排序,以便我有這樣的代碼:如何使用LINQ

void dataFromFile() 
    { 
     if (File.Exists(filename)) 
     { 
      foreach (var data in File.ReadAllLines(filename).Select(line => line.Split(' ')). 
       Select(m => new { name = m[0], length = int.Parse(m[1]) })) 
      { 
       Rectangle r = new Rectangle { Height = data.length, Width = 25, Fill = Brushes.Red }; 
       Canvas.SetLeft(r, rnd.Next(200)); 
       Canvas.SetTop(r, 200); 
       table.Children.Add(r); 
      } 
     } 
    } 

的事情是,我有哪裏都是人的名字和他們高度的文件。我必須做一個條形圖並將它們從最小到最高排序。對於條形圖,我製作了一個與我從文件中獲得的數據具有相同高度的矩形,但我不知道如何對這些條進行排序。

回答

2

只需添加OrderBy運營商排序您序列:

void dataFromFile() 
{ 
    if (!File.Exists(filename)) 
     return; 

    var people = File.ReadLines(filename) 
        .Select(line => line.Split(' ')) 
        .Select(m => new { Name = m[0], Height = int.Parse(m[1]) }) 
        .OrderBy(p => p.Height); // here 

    var bars = people.Select(p => 
      new Rectangle { Height = p.Height, Width = 25, Fill = Brushes.Red }); 

    foreach (var bar in bars) 
    { 
     Canvas.SetLeft(bar, rnd(200)); 
     Canvas.SetTop(bar, 200); 
     table.Children.Add(bar); 
    } 
} 
3

只需追加.OrderBy(p => p.length)OrderByDescending(),具體取決於您在查詢中最後一次選擇後如何訂購它們。這樣你就可以獲得排序數據,你可以繪製圖表而不是繪製圖表,然後對列進行排序。