【问题标题】:C# Sort 2D array based on key arrayC#根据键数组对二维数组进行排序
【发布时间】:2016-10-27 16:18:50
【问题描述】:

我正在尝试基于 1D 数组作为键对 2D 字符数组进行排序。我需要找到一个到目前为止没有在 key 中使用的 char,然后根据它进行排序。
铁:

AEITY
EDNTB

TEAIY
TDENB

基于密钥:

TEAIY

在第 0 行

我的代码处理多个字符并提供了不好的结果:
铁:

AAABN
TEAIY
TDENB

ABANA
TIEYA
TNDBE

但我得到的不是那个

ABANA
AIEYT
ENDBT

基于密钥:

阿巴纳

我发现的代码:

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;
    }

我知道那个 ELSE 语句有问题,我在其中比较了键循环中 char 的当前计数。 谢谢你的想法。

【问题讨论】:

    标签: c# arrays sorting


    【解决方案1】:

    我的问题很简单。我尝试根据我所做的数组键对二维数组进行排序,但我也将相同的结果保存到相同的二维数组中,而不跟踪更改。这可以通过指针逻辑或新数组来解决,您只需复制排序结果而不更改基本二维数组。

     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;
            }
    

    【讨论】:

      猜你喜欢
      • 2022-01-10
      • 1970-01-01
      • 2012-06-15
      • 1970-01-01
      • 2018-08-17
      • 2014-07-30
      • 2020-12-15
      • 2015-09-17
      相关资源
      最近更新 更多