对参数进行排序并将每个单词插入到字符串数组中

时间:2013-11-01 17:33:30

标签: c# arrays sorting

所以让我说我有这些论点:“aword1 bword dword zword aword2” 我必须把它们插入一个像这样的字符串数组中:

arrayofstrings[0][] = aword1 aword2
arrayofstrings[1][] = bword
arrayofstrings[2][] = null/nothing
arrayofstrings[3][] = dword
...
arrayofstrings[25][] = zword


我已经知道如何做到但这并不优雅。
我的解决方案:检查args中的每个单词是否为第一个字母(26个如果是26个案例)并在26个整数数组中增加计数器,这样我就可以知道必须分配多少空间并检查并将每个单词复制到[ ] [] arrayofstrings。

如果没有26个案例,我怎么能这样做?非常感激。如果您没有注意到我是c#的新手(来自c ++,vb)。


ps:我的字母表包含26个字母。


后来编辑:
这是我的示例代码(仅供您了解我想要的内容):

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Lab4LineComanda
{
    class Program
    {
        static void Main(string[] args)
        {
            string[][] ArrayOfStrings = new string[25][];
            int[] counters = new int[26];
            for (int i = 0; i < args.Length; i++)
            {
                if (args[i].First() == 'a')
                    counters[0]++;
                if (args[i].First() == 'b')
                    counters[1]++;
                //if's for each letter which I don't feel like doing
                if (args[i].First() == 'z')
                   counters[25]++;
            }
            Array.Sort(args);

            ArrayOfStrings[0] = new string[counters[0]];
            ArrayOfStrings[1] = new string[counters[1]];
            for (int i = 0; i < counters[0]; i++)
                ArrayOfStrings[0][i] = args[i];
            //again, for each letter i must do this, which, again, I don't feel like doing(there must be better way)

        }
    }
}


我不知道有多少以'a'开头的单词(如果有的话)。这适用于每一封信。
我必须使用字符串[] []进行教育。我使用了“c ++”标签,因为对我而言,它更像是一个逻辑问题,而不是语言特定的问题,但这是我的坏事。 对不起,我很难解释我想要的东西,因为英语很难(对我来说):)。

2 个答案:

答案 0 :(得分:0)

您可以使用这样一个事实,即在字符表中,az的所有字母都按顺序排列。因此,您可以分配List<List<String>>并获取要ord('a') - ord(firstChar)添加的索引。

答案 1 :(得分:0)

以下是3行中的一种方法:

IList<IList<string>> allMyStrings = Enumerable.Repeat(0, 26)
                                    .Select(x => new List<string>()).ToArray();
foreach (var arg in "aword1 bword dword zword aword2".Split(' '))
    allMyStrings[arg[0] - 'a'].Add(arg);

我使用了string[][]而不是List<string>[],因此内部列表会根据需要自行调整大小。为了计算要添加字符串的列表,我使用arg[0] - 'a',它计算参数的第一个字母和字符char之间a值的差异。它不是通用代码,因为如果任何参数不以a-z中的字母开头,它将无法正常工作,但它适用于您的示例。