同时对2个数组进行排序

本文关键字:排序 数组 2个 | 更新日期: 2023-09-27 18:25:49

我有两个想要排序的数组,但要保持元素正确对齐。例如元素[x]处的button1与元素[x]处的textbox1保持一致。可能还有另一种结构我可以用,但我想不通。

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)
};

同时对2个数组进行排序

首先想到的方法是为数据对创建一个数据结构,将它们放入一个数组中,然后根据所需数据对该数组进行排序。您实际上并没有指定要对哪些数据进行排序,所以我假设它是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传递到List上的sort方法中,然后在那里执行排序逻辑。

我希望这能有所帮助,祝你好运。

希望下面的代码对您有所帮助。请告诉我它是否按你的意图工作。感谢

            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));

使用Linq:

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