2016-07-20 12 views
0

先頭の数字に基づいてリストを正しく並べ替えるのに問題があります。私は順番に次のように並べ替えしようとしています並べ替えリスト<string >先頭の数字で

など、並べ替え、それは、1から始まるその後、10になり、11時:

1 | Text One 
10 | Text Two 
11 | Text Three 

私は並べ替えしようとしている方法はここにあります:

finalnoteslist = finalnoteslist.OrderBy(num => num).ToList(); 

     System.Text.StringBuilder clipData = new System.Text.StringBuilder(); 

     foreach (object value in finalnoteslist) 
     { 
      clipData.AppendLine(value.ToString()); 
     } 
     Clipboard.Clear(); 
     Clipboard.SetText(clipData.ToString()); 
     MessageBox.Show(clipData.ToString() + Environment.NewLine + "NOTES COPIED TO CLIPBOARD. CONTROL + V TO PASTE IN DRAWING");    
    } 

    int CompareStringBuilders(System.Text.StringBuilder a, System.Text.StringBuilder b) 
    { 
     for (int i = 0; i < a.Length && i < b.Length; i++) 
     { 
      var comparison = a[i].CompareTo(b[i]); 
      if (comparison != 0) 
       return comparison; 
     } 

     return a.Length.CompareTo(b.Length); 
    } 
+0

doesnの」にあなたが何かを試したように見えません... –

+0

あなたは'1 |テキストワン '' 10 |テキスト2 'と '11 |テキスト3? '|'の前の数字でソートしたいのですか? – user3185569

+0

最初から数値を解析し、数値を比較する必要があります。 – lintmouse

答えて

1

あなたはそのセパレーター|で各項目を分割し、int値に最初の部分を解析します。その後、それらを並べ替える。

List<string> finalnoteslist = new List<string>() 
          { "1 | Text One", 
           "10 | Text Two", 
           "11 | Text Three" 
          }; 
finalnoteslist = finalnoteslist.OrderBy(x => int.Parse(x.Split('|').First())).ToList(); 
1

あなたはあなたのリストをソートするために使用することができますリードする整数を、分割して取得するためにstring.Splitを使用することができます。

finalnoteslist = finalnoteslist.OrderBy(x=> int.Parse(x.Split('|')[0])).ToList(); 

その場でリストをソートするには、このDemo

1

をお試しください:

List<string> strings = new List<string>() 
{ 
    "1 | Text One", "12 | Text Two", "100 | Text Three", "2 | Text Four" 
}; 

Func<string, int> getNumber = (str) => Int32.Parse(str.Split('|').FirstOrDefault()); 

strings.Sort((y, x) => getNumber(y) - getNumber(x)); 

LINQの(新しいリストを作成します)を使用してソートする:

strings = strings.OrderBy(x => convertFunction(x)).ToList(); 
関連する問題