在检测到特定类型的元素

时间:2018-03-17 16:03:38

标签: c# .net arrays

假设一个数字数组(只是数字,但定义为一个字符串,它必须保持这样,因为其他原因),如: { "1234", "0876", "9876", "45614537", "7553", ......}

正如您所注意到的,除了一个有8位数的数字外,所有数字都应该有4位数。

我想识别这些8位数的特殊情况,并将其分成4个数字,并放回原始数组中,在原始数组中执行“右移”。

这是我的代码

private void button1_Click(object sender, EventArgs e)
{
    string[] numbers = { "01", "03", "09", "12", "1517", "24", "72", "3456", "23", "34", "7656" };

    int nr; // The number in the string
    bool number;

    int[] nr_big;
    bool nr_big_bool;

    string nr_char;
    char[] nr_char_array;

    for (int i = 0; i < numbers.Length; i++)
    {
         number = int.TryParse(numbers[i], out nr);


        // Detect big number (For this problem i need also to check if it is a even number
        if (nr % 2 == 0 && numbers[i].Length > 2)
        {
            // At this point "nr" should be the number that want to divide right?
            nr_char = nr.ToString();
            nr_char_array = nr_char.ToCharArray();

            if (nr_char_array.Length > 2)
                // and now???
        }
    }
}

1 个答案:

答案 0 :(得分:0)

我们真的不清楚你要做什么以及“分成2个数字”究竟是什么意思,但是,假设你的意思是"45614537"成为"4561""4537",那么你可以做到这一点(如果没有,那么它不应该很难适应你需要做的任何事情):

string[] numbers = { "1234", "0876", "9876", "45614537", "7553" };
var result = numbers.Aggregate(new List<string>(), (p,c) => {
    if (c.Length > 4) {
        p.Add(c.Substring(0,4));  // get the first 4 characters
        p.Add(c.Substring(4));    // get the remaining characters
    }
    else {
        p.Add(c);
    }
    return p;
});

这使用Aggregate函数将您的数组映射到List(如果您 需要使用ToArray,则可以将其转换为数组) 。我们从一个空列表开始,然后循环遍历原始数组。如果字符串的长度超过4(您可以将此条件更改为对您有意义的任何条件),我们将两个子字符串推送到列表中(这是分割部分,如果要更改它,则这将是这样做的地方)。如果没有,我们只需将当前值推送到列表中。

此代码仅假设4位和8位数字条目,因为这就是您所询问的内容。但同样,应该很容易适应你需要的任何东西。