假设一个数字数组(只是数字,但定义为一个字符串,它必须保持这样,因为其他原因),如:
{ "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???
}
}
}
答案 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位数字条目,因为这就是您所询问的内容。但同样,应该很容易适应你需要的任何东西。