2014-10-08 25 views
0

我有2個數組,我想要排序,但保持元素對齊正確。例如,元素[x]上的button1與元素[x]上的textbox1保持一致。這可能是另一個我可以使用的結構,但我無法弄清楚。同時排序2個數組

String[] Teams = { 
    textBox1.Text, textBox2.Text, textBox3.Text, 
    textBox4.Text, textBox5.Text, textBox6.Text, 
    textBox7.Text, textBox8.Text, textBox9.Text 
}; 
int[] Scores = { 
    Convert.ToInt32(button1.Text), Convert.ToInt32(button2.Text), Convert.ToInt32(button3.Text), 
    Convert.ToInt32(button4.Text), Convert.ToInt32(button5.Text), Convert.ToInt32(button6.Text), 
    Convert.ToInt32(button7.Text), Convert.ToInt32(button8.Text), Convert.ToInt32(button9.Text) 
}; 

回答

1

想到的第一種方式是創建一個數據結構用於對數據的,把那些到一個數組然後排序所需的數據數組。你沒有真正指定你想要排序的數據,所以我會假設它是textBoxN.Text的值。

struct DataInfo { 
    public string Name, 
    public string Value 
} 

var data = new List<DataInfo>(); 
for(var x = 1; x < 10; x++) { 
    var textBox = this.Find("textBox" + x); 
    var button = this.Find("button" + x); // find the controls somehow 

    data.Add(new DataInfo { Name = Convert.ToInt32(button.Text), Value = textBox.Text }; 
} 

data.Sort((left, right) => left.Value.CompareTo(right.Value)); 

其實有幾種方法排序,但最簡單的就是一個lambda傳遞到名單上的排序方法,只是做你的那種邏輯就在那裏。

我希望這會有所幫助,祝你好運。

0

希望下面的代碼可以幫助你。請讓我知道它是否按您的意圖工作。由於

  String[] Teams = { 
       "TeamC", "TeamB", "TeamA" 
      }; 

      int[] Scores = { 
       0, 1, 2 
      }; 

      var sortedTest = Teams 
       .Select((x, i) => new KeyValuePair<string, int>(x.ToString(), i)) 
       .OrderBy(x => x.Key) 
       .ToList(); 

      String[] TeamsSorted = sortedTest.Select(x => x.Key).ToArray(); 
      List<int> idx = sortedTest.Select(x => x.Value).ToList(); 

      List<int> sortedScores = new List<int>(); 
      for (int i = 0; i < idx.Count; i++) 
      { 
       sortedScores.Add(Scores[idx[i]]); 
      } 

      Console.WriteLine("Sorted Teams: "); 
      TeamsSorted.ToList().ForEach((m) => Console.WriteLine(m)); 

      Console.WriteLine("Sorted Scores: "); 
      sortedScores.ToList().ForEach((m) => Console.WriteLine(m)); 
0

使用LINQ:

var sortedByTeam = Teams 
    .Zip(Scores, (t, s) => new { Team = t, Score = s }) 
    .OrderBy(x => x.Team).ToList();