需要有关字符串数组的简单字符串排序方法的帮助

时间:2013-05-16 02:50:19

标签: c# .net string winforms

严重需要一些关于字符串排序方法的指南。也许,如果能够提供一些示例代码将是一个很大的帮助。这不是作业。我需要这种排序方法来同时检查多个通道名称,并根据排序名称/字符串结果相应地提供通道。

首先,我将使用下面的字符串数组模式:

string[] strList1 = new string[] {"TDC1ABF", "TDC1ABI", "TDC1ABO" };

string[] strList2 = new string[] {"TDC2ABF", "TDC2ABI", "TDC2ABO"};

string[] strList3 = new string[] {"TDC3ABF", "TDC3ABO","TDC3ABI"}; //2nd and 3rd element are swapped

我想收到一个字符串[]结果,如下所示:

//result1 = "TDC1ABF , TDC2ABF, TDC3ABF"
//result2 = "TDC1ABI , TDC2ABI, TDC3ABI"
//result3 = "TDC1ABO , TDC2ABO, TDC3ABO"

好的,这是我进行排序的想法。 首先,每个strList排序关键字* ABF。 然后,将带有* ABF的所有字符串放入结果数组中。 最后执行Order排序,使字符串数组相应地对齐TDC1ABF,TDC2ABF,TDC3ABF。 对循环中的其他字符串数组执行相同的操作。

所以,我的问题是..如何在字符串数组中的字符串中搜索* ABF?

3 个答案:

答案 0 :(得分:3)

    static void Main()
    {
        var strList1 = new[] { "TDC1ABF", "TDC1ABI", "TDC1ABO" };
        var strList2 = new[] { "TDC2ABF", "TDC2ABI", "TDC2ABO" };
        var strList3 = new[] { "TDC3ABF", "TDC3ABO", "TDC3ABI" };

        var allItems = strList1.Concat(strList2).Concat(strList3);

        var abfItems = allItems.Where(item => item.ToUpper().EndsWith("ABF"))
            .OrderBy(item => item);
        var abiItems = allItems.Where(item => item.ToUpper().EndsWith("ABI"))
            .OrderBy(item => item);
        var aboItems = allItems.Where(item => item.ToUpper().EndsWith("ABO"))
            .OrderBy(item => item);
    }

答案 1 :(得分:1)

如果您执行此类操作,则可以比较所有总和并按顺序排列。较低的总和是接近1的那些,而较高的是较远的。

    static void Main(string[] args)
    {
        string[] strList1 = new string[] { "TDC1ABF", "TDC1ABI", "TDC1ABO" };
        string[] strList2 = new string[] { "TDC2ABF", "TDC2ABI", "TDC2ABO" };
        string[] strList3 = new string[] { "TDC3ABF", "TDC3ABO", "TDC3ABI" };


        arrange(strList1);
        arrange(strList2);
        arrange(strList3);
    }

    public static void arrange(string[] list)
    {
        Console.WriteLine("OUT OF ORDER");
        foreach (string item in list)
        {
            Console.WriteLine(item);
        }
        Console.WriteLine();
        for (int x = 0; x < list.Length - 1; x++)
        {

            char[] temp = list[x].ToCharArray();
            char[] temp1 = list[x + 1].ToCharArray();

            int sum = 0;

            foreach (char letter in temp)
            {
                sum += (int)letter; //This adds the ASCII value of each char 
            }

            int sum2 = 0;

            foreach (char letter in temp1)
            {
                sum2 += (int)letter; //This adds the ASCII value of each char 
            }

            if (sum > sum2)
            {
                string swap1 = list[x];
                list[x] = list[x + 1];
                list[x + 1] = swap1;
            }

        }
        Console.WriteLine("IN ORDER");
        foreach (string item in list)
        {
            Console.WriteLine(item);
        }
        Console.WriteLine();
        Console.ReadLine();
    }

答案 2 :(得分:0)

如果保证数组的元素数量与数组一样多,那么您可以先对单个数组进行排序,将已排序的数组转储到nxn数组中,然后转置矩阵。