2014-10-08 27 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();