4

「テキストファイル」、「画像ファイル」、「オーディオファイル」、「ビデオファイル」、「アプリケーションファイル」、「その他のファイル」などの文字列の固定セットを、私が言及したのと同じ順序で文字列配列に並べ替えたい.

Example1、私の文字列配列入力がこのような場合

inputval[0] = "Other files";
inputval[1] = "Image files";
inputval[2] = "Text files";

私の出力配列は、このような値を持つ必要があります

outputval[0] = "Text files";
outputval[1] = "Image files";
outputval[2] = "Other files";

例 2、文字列配列の入力がこのような場合

inputval[0] = "Application files";
inputval[1] = "Image files";
inputval[2] = "Video files";

私の出力配列は、このような値を持つ必要があります

outputval[0] = "Image files";
outputval[1] = "Video files";
outputval[2] = "Application files";

誰かがこれを達成するのを手伝ってくれますか

4

4 に答える 4

8

この大まかな実装は、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;
        }
    }
}
于 2012-05-28T09:15:36.267 に答える
1

を実装するICompareと、 を使用OrderByICompareてカスタム ソートを取得できます。MSDN ICompare の記事を確認してください

つまり、次のようなものです。

public class MyCompare : ICompare<string>
{
    // Because the class implements IComparer, it must define a 
    // Compare method. The method returns a signed integer that indicates 
    // whether s1 > s2 (return is greater than 0), s1 < s2 (return is negative),
    // or s1 equals s2 (return value is 0). This Compare method compares strings. 
    public int Comapre(string s1, string s2)
    {
        // custom logic here
    }
}
于 2012-05-28T09:07:58.247 に答える
1

あなたが望むものからあまり明確ではないので。そのため、 に繰り返しがないことを考慮しましたinputval

string[] fixed_array =  { "Text files", "Image files", "Audio files", 
                        "Video files", "Application Files", "Other files" };

言いましょう

inputval[0] = "Other files";
inputval[1] = "Image files";
inputval[2] = "Text files";

これを行う

string[] outputval =
          fixed_array.Select(x => inputval.Contains(x) ? x : "-1")
                     .Where(x => x != "-1").ToArray();

そうoutputvalなる

outputval[0] = "Text files";
outputval[1] = "Image files";
outputval[2] = "Other files";
于 2012-05-28T09:09:03.017 に答える
0

先頭に数字を追加した文字列を並べ替えたリストに追加するだけです..

「0,テキストファイル」、「1,画像ファイル」、「2,音声ファイル」、「3,動画ファイル」、「4,アプリケーションファイル」、「4,その他のファイル」など

そして、使用中に「、」の前の文字列を削除します..

于 2012-05-28T09:10:04.547 に答える