2015-06-21 71 views
0

我正在开发一个项目,我需要在2个数组中进行排序,并按照降序排列打印出来。在C中反向排序2数组#

这是我现在有:

string[] nPlayer = {"aaa", "bbb", "ccc", "ddd", "eee"} 
    int[] nScore = {555, 444, 333, 222, 111} 

    public void Print() 
    { 
     Array.Sort(nScore, nPlayer); 
     PrintKeysAndValues(nPlayer, nScore); 
    } 

    public static void PrintKeysAndValues(String[] myKeys, int[] myValues) 
    { 
     for (int i = 0; i < myKeys.Length; i++) 
     { 
      Console.WriteLine("{0}\t{1}", myKeys[i], myValues[i]); 
     } 
    } 

输出我得到的是:(排序由数字)

eee 111 
ddd 222 
ccc 333 
bbb 444 
aaa 555 

我需要得到它在这种反向显示(排序方式号码)

aaa 555 
bbb 444 
ccc 333 
ddd 222 
eee 111 

只是注意...输入时的数字都将随机不是为了...

+0

经过排序后循环和交换阵列中的所有值第一个到最后,最后一个first.Also您的INT []不会以这种方式编译。 – deathismyfriend

+0

是的,我看到对不起,在 –

+0

输入它,因为数据看起来相互关联,你最好使用一个类,所以分数与玩家保持一定。 – Plutonix

回答

1

您可以使用Array.Revers方法反转数组。

public void Print() 
    { 
     Array.Sort(nScore, nPlayer); 
     Array.Reverse(nScore); 
     Array.Reverse(nPlayer); 
     PrintKeysAndValues(nPlayer, nScore); 
    } 
+0

时,这并不是很复杂如果“在输入过程中的数字都是随机的不按顺序的话......”我不明白这是如何工作的... ...这不会逆转随机顺序吗? – danludwig

+0

还要注意,使用一个类来保存玩家的数据是更加可行的。 – deathismyfriend

+0

@danludwig上面的第一个基于分数对数组进行排序。然后它将两个数组反转,保持数据一致。 – deathismyfriend

0

可以使用任何比较排序算法以降序排列numbers数组。
排序时,需要为字符串数组重新排列相同的元素。
您是否正在寻找一个代码来完成上述操作?

+0

如果你有一个例子,它会有所帮助。我目前正在努力学习和C#是复杂的...可能只是坚持使用红宝石。 –

+0

当你开始从开始学习 –

1

LINQ也工作,并可以让你完全跳过的Array.Sort:

nScore = nScore.OrderByDescending(c => c).ToArray(); 
nPlayer = nPlayter.OrderByDescending(c => c).ToArray(); 
PrintKeysAndValues(nPlayer, nScore); 
+2

与那wouldnt球员和分数混在一起,而不是相同的 –

+0

不要忘了你需要使用System.Linq来编译。 – danludwig

+0

哎呀,是的,你是对的......我没有注意到两个阵列之间的关系。您可以使用Tuple ,创建播放器对象,或者使用LINQ的Select扩展方法将其投影到新对象中,以便轻松排序。其他任何方法都是黑客行为。 – br4d