同时对2个数组进行排序

时间:2014-10-08 03:02:10

标签: c# arrays

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

3 个答案:

答案 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();