简体   繁体   English

C#根据键数组对2D数组进行排序

[英]C# Sort 2D array based on key array

I'm trying to sort 2D array of chars based on 1D array as key. 我正在尝试基于1D数组作为键对char的2D数组进行排序。 I need to find a char that wasn't used in key so far and then sort it based on it. 我需要找到一个到目前为止尚未在键中使用的字符,然后根据它对它进行排序。
Fe:

AEITY
EDNTB

to

TEAIY
TDENB

based on key: 根据密钥:

TEAIY 特技

on row 0 在第0行

My code struggle with an multiple chars and provide bad results: 我的代码与多个字符作斗争,并提供了不好的结果:
Fe:

AAABN
TEAIY
TDENB

to

ABANA
TIEYA
TNDBE

but instead of that i get 但是相反,我得到了

ABANA
AIEYT
ENDBT

based on key: 根据密钥:

ABANA 阿巴那

Code i figure out: 我找出的代码:

static char[][] SortSimiliarity(char[][] arr, char [] key, int arrRow)
    {

        Dictionary<char, int> dcKeyList = new Dictionary<char, int>();

        for (var i = 0; i < key.Length; i++)
        {
            var counterCurrentKey = 0;
            for (var j = 0; j < key.Length; j++)
            {
                if(key[i] == arr[arrRow][j]) 
                {
                    //Console.WriteLine("{0} == {1}", key[i], arr[arrRow][j]);

                    if (!dcKeyList.ContainsKey(key[i]))
                    {
                        for (var k = 0; k < key.Length; k++)
                        {
                            //Console.WriteLine("x");
                            var temp = arr[k][j];
                            arr[k][j] = arr[k][i];
                            arr[k][i] = temp;
                        }
                        dcKeyList.Add(key[i], 1);
                    }
                    else
                    {   
                        if (dcKeyList[key[i]] == counterCurrentKey)
                        {
                            Console.WriteLine("key is {0}", dcKeyList[key[i]]);
                            for (var k = 0; k < key.Length; k++)
                            {
                                //Console.WriteLine("x");

                                var temp = arr[k][j];
                                arr[k][j] = arr[k][i];
                                arr[k][i] = temp;
                            }
                            dcKeyList[key[i]]++;
                        }
                        counterCurrentKey++;
                    }
                }              
            }

        }
        return arr;
    }

I know there is something wrong with that ELSE statement, where i compare current count of char in key loop. 我知道那条ELSE语句有问题,在这里我比较了键循环中char的当前计数。 Thank you for your ideas. 感谢您的想法。

My problem was simple. 我的问题很简单。 I tried to sort 2d array based on array key which i does, but i also save same result into same 2d array, without keeping tracks on changes. 我试图根据我做的数组键对2d数组进行排序,但是我也将相同的结果保存到相同的2d数组中,而不跟踪更改。 That can be solved with pointer logic or with new array where you copy only your sorted results without changing the base 2D array. 这可以通过指针逻辑或新数组来解决,在新数组中,您仅复制排序的结果,而无需更改基本2D数组。

 static char[][] SortSimiliarity(char[][] arr, char[] key, int arrRow)
            {
            // init dict

            Dictionary<char, int> dict = new Dictionary<char, int>();

            // init new matrix
            char[][] tempArray = new char[5][];
            for(var i = 0; i < 5; i++)
            {
                tempArray[i] = new char[5];
            }

            // copy new sorted keys
            for (var i = 0; i < key.Length; i++)
            {
                for (var j = 0; j < key.Length; j++)
                {
                    if (key[i] == arr[arrRow][j])
                    {
                        if (!dict.ContainsKey(key[i]))
                        {
                            dict.Add(key[i], j);
                            for(var k = 0; k < key.Length; k++)
                            {
                                tempArray[k][i] = arr[k][j];
                            }
                            break;
                        }
                        else
                        {
                            if(j != dict[key[i]])
                            {
                                for (var k = 0; k < key.Length; k++)
                                {
                                    tempArray[k][i] = arr[k][j];
                                }
                                dict[key[i]] = j+1;
                            }
                        }
                    }
                }
            }
            return tempArray;
        }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM