我有2个数组,我想要我想要排序,但保持元素正确对齐。例如,元素[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)
};
答案 0 :(得分: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传递给List上的Sort方法,然后直接在那里进行排序逻辑。
我希望这有帮助,祝你好运。
答案 1 :(得分: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));
答案 2 :(得分:0)
Linq:
var sortedByTeam = Teams
.Zip(Scores, (t, s) => new { Team = t, Score = s })
.OrderBy(x => x.Team).ToList();