按自定义顺序排序String数组

Pra*_* KM 4 c# arrays sorting

我想按照我提到的相同顺序对字符串数组中的"文本文件","图像文件","音频文件","视频文件","应用程序文件","其他文件"等一组固定的字符串进行排序.

例1,如果我的字符串数组输入是这样的

inputval[0] = "Other files";
inputval[1] = "Image files";
inputval[2] = "Text files";
Run Code Online (Sandbox Code Playgroud)

我的输出数组应该有这样的值

outputval[0] = "Text files";
outputval[1] = "Image files";
outputval[2] = "Other files";
Run Code Online (Sandbox Code Playgroud)

例2,如果我的字符串数组输入是这样的

inputval[0] = "Application files";
inputval[1] = "Image files";
inputval[2] = "Video files";
Run Code Online (Sandbox Code Playgroud)

我的输出数组应该有这样的值

outputval[0] = "Image files";
outputval[1] = "Video files";
outputval[2] = "Application files";
Run Code Online (Sandbox Code Playgroud)

请有人帮助我实现这一目标

Ada*_*rth 7

这个粗略的实现使用IComparer<string>提供给Array.Sort工作.有各种潜在的缺点,但我会把这些留给你(就像字符串需要完全匹配,否则他们将无法正确排序).

它只是使用表示正确顺序的字符串的内部列表,然后将它们在该列表中的序数相互比较.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication61
{
    class Program
    {
        static void Main(string[] args)
        {
            string[] files = new[] { "Audio Files", "Text Files", "Video Files", "Other Files", "Application Files" };
            Array.Sort(files, new FileComparer());
            Console.Read();
        }
    }

    class FileComparer : IComparer<string>
    {
        static List<string> OrderedFiles = new List<string> { "Text Files", "Image Files", "Audio Files", "Video Files", "Application Files", "Other Files" };

        public int Compare(string x, string y)
        {
            int xi = OrderedFiles.IndexOf(x);
            int yi = OrderedFiles.IndexOf(y);

            if (xi > yi)
                return 1;

            if (xi < yi)
                return -1;

            return 0;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)