同时对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)
};
首先想到的方法是为数据对创建一个数据结构,将它们放入一个数组中,然后根据所需数据对该数组进行排序。您实际上并没有指定要对哪些数据进行排序,所以我假设它是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();