簡體   English   中英

如何在C#中對非英語(斯洛文尼亞語)單詞數組進行排序?

[英]How to sort an array of non-english (Slovanian) words in C#?

我有一個斯洛文尼亞字符組成的字符串,例如(žiga,špela,črt,...),我需要按字母順序對字符串進行排序,這個問題我只想使用循環來實現,而無需在.NET之類的array.Sort()使用任何內置函數array.Sort()

static string[] SortByName(string[] fullname)
{
    char[] abc =
    {
        'a', 'b', 'c', 'č', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'r', 's', 'š','t', 'u', 'v', 'z', 'ž'
    };

    int counter = 0;
    for (int i = 0; i<abc.Length;i++)
    {
        for (int j = 0; j < fullname[counter].Length; j++)
        {
            // I still cant figure out what i can do here 
        }
        counter++;
    }
}

在您的程序中, char數組abc按順序存儲所有斯洛文尼亞字母。 您可以使用此數組作為所有斯洛文尼亞字母排名的參考,以比較斯洛文尼亞單詞。 在下面的代碼中,我定義了一個CompareSl()方法來比較斯洛文尼亞單詞,就像String類的Compare()方法比較英語單詞一樣。 (方法index()返回數組abc中字符的索引。)

String類的Compare()方法將兩個字符串s1s2作為參數,
•如果字符串相等,則返回0
♦如果s1> s2返回(+)ve
♦如果s1 <s2返回(-)ve

using System;

class Sl_Sort{    

    static void Main(){
        string[] words = new string[]{"žiga", "špela", "črt"};

        Console.WriteLine("Unsorted array is");
        foreach(String st in words)
            Console.Write(st+" , ");
        //do selection sort to sort in ascending order

        for(int i=0; i<words.Length-1;i++){
            int min = i;
            for(int j=i+1; j<words.Length;j++){
                if(CompareSl(words[min], words[j]) > 0)
                    min  = j;
            }
            string temp = words[i];  
            words[i] = words[min]; 
            words[min] = temp;
        }
        Console.WriteLine("\nSorted array is");
        foreach(String st in words)
            Console.Write(st+" , ");
        Console.ReadKey(); //waits till user presses a key before terminating
    }

    public static int CompareSl(string s1, string s2){
        if(s1.Length == s2.Length){
            for(int i=0; i<s1.Length; i++){
                if(s1[i] != s2[i])
                    return index(s1[i]) - index(s2[i]);
            }
        }
        else{
            String s = s1.Length<s2.Length?s1:s2;
            for(int i=0; i<s.Length; i++){
                if(s1[i] != s2[i])
                    return index(s1[i]) - index(s2[i]);
            }
            if(s == s1)
            return -1;
            else
            return 1;
        }
        return 0;
    }

    private static int index(char c){
        char[] abc = { 'a', 'b', 'c', 'č', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'r', 's', 'š', 't', 'u', 'v', 'z', 'ž' };
        for(int i=0; i<abc.Length; i++){
            if(abc[i]==c)
            return i;
        }
        return -1;
    }
}

輸出:

Unsorted array is
ziga , spela , crt ,

Sorted array is
crt , spela , ziga  

注意:字符žšč分別轉換為zsc因為我在其上運行代碼的平台未設置為UTF-8Unicode (支持Slovene,但設置為ANSI ,但不支持Slovene)。 確保您的系統支持Slovene以獲取正確的輸出。

希望這可以幫助。

也許您可以執行以下操作:

 private char[] charList = { 'a', 'b', 'c', 'č', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'r', 's', 'š', 't', 'u', 'v', 'z', 'ž' };
public string[] Sort(string inputStr)
{
    string[] sortedChars = new string[inputStr.Length];
    int index = 0;
    for (int i = 0; i < charList.Length; i++)
    {
        for (int u = 0; u < inputStr.Length; u++)
        {
            sortedChars[index] = inputStr[u];
            index++;
        }
        if (index == inputStr.Length)
            return sortedChars;   
    }   
    return sortedChars;
}   

我還沒有測試代碼,所以不確定它是否有效,但是它的作用是:遍歷char,因此它在inputString的每個char上搜索“ a”,如果有,它將被添加到已排序的字符串中[],然后以第一個字符結束時,再輸入下一個...等。

可能有一些錯誤,也許您可​​以改進代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM