繁体   English   中英

检查字符串数组是否包含数字

[英]Check If An Array of String Contains Number

我正在尝试完成一项任务并且非常接近完成。 这是场景 - 对于字符串数组,我需要根据每个元素中的字母数进行排序,如下所示:

 string[] str = {"aaa", "cccc", "a"}; 

输出

a, aaa, cccc //Sorted according to the number of letters

为了解决上述问题,请执行以下操作:

class Program
{
    static void Main(string[] args)
    {
        int chkNumber;
        string[] str = { "aaa", "cccc", "a",};
        string result = "";

        Array.Sort(str);
        foreach (var i in str)
        {
            bool isNumber = int.TryParse(i, out chkNumber);

            result = String.Join(", ", str.OrderBy(i => i.Length));
        }

        Console.WriteLine(result);
    }
}

但我的要求是检查数组字符串中的数字并相应地进行排序。 如下所示:

string[] str = {"aaa", "cccc", "a", "2"};

由于它有一个数字,我尝试如下检查:

bool isNumber = int.TryParse(i, out chkNumber);

我的计划是获取号码并将其排序如下:

a, 2, aaa, cccc //As it's number 2 and places accordingly

我实际上也坚持如何使用字符串对该数字进行排序。 这样做是否有效或需要更改上述代码片段?

看起来您正在尝试按项目长度对数组进行排序,但任何数字项目除外,该项目应放在相应的索引中。

如果是这种情况,那么您可以首先获取所有非数字项,按长度对其进行排序,然后对数字项进行排序并将它们插入到相应的索引中。

需要考虑的事项:

  1. 如果数字大于数组中的项目数怎么办?

    • 在下面的代码中,如果数组中的项目比数字少(即没有匹配的索引),那么我只是把数字放在最后。 如果需要,您可以以不同的方式处理此问题。
  2. 如果数字小于数组中的项目数怎么办(即负数)

    • 我没有做任何特别的事情来处理负数,所以它们最终会被常规数字打乱并弄乱结果。 您可以定义有关如何处理它们的规则,然后将这些规则应用于下面的代码。 我想到的两个是 1)抛出异常 2)像对待非数字一样对待它们。
  3. 如果有重复的数字怎么办?

    • 同样,我没有做任何事情来处理这个问题。 您很可能会抛出异常或忽略重复项(这将导致结果数组的长度缩小)。

public static string[] CustomSort(string[] input)
{
    if (input == null || input.Length < 2) return input;
    
    // Get all the non-number results sorted by length
    int temp;
    var result = input
                     .Where(i => !int.TryParse(i, out temp))
                     .OrderBy(i => i.Length)
                     .ToList();
    
    // Get all the number results sorted by numeric value
    var numbers = input
                     .Where(i => int.TryParse(i, out temp))
                     .OrderBy(i => int.Parse(i))
                     .ToList();
        
    // Insert each number result into it's correct index
    foreach(var number in numbers)
    {
        var index = int.Parse(number) - 1;
        
        if (result.Count() >= index)
        {
            result.Insert(index, number.ToString());
        }
        else
        {
            result.Add(number.ToString());
        }
    }
    
    return result.ToArray();
}

一个简单的解决方案是:

result = str.OrderBy(i => {
    int num =0;
    if(int.TryParse(i, out num)) return num ;
    return  i.Length;
});

暂无
暂无

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

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