如何修改LINQ索引号
如何修改数组中的索引号,使其对于数字1-9具有前面的0。 但是,我希望数字10保持不变。如何修改LINQ索引号
这是调试的原始数据来自tb1.text
"1ABC\r\n2ABC\r\3ABC\r\4ABC\r\n5ABC"
让我的数据时,这是我想如何将数据存储在我的LocalDB。
"01ABC\r\n02ABC\r\03ABC\r\04ABC\r\n...10ABC"
这是我到目前为止。
var lines = tb1.Text.Split('\n').Select((line, index) => "YRZ"+(index + 01) + line).ToArray();
var res = string.Join("\n", lines);
如果你只是想在字符串中0
为什么不更新它作为一个字符串:
var text = "1ABC\r\n2ABC\r\n3ABC\r\n4ABC\r\n5ABC";
var lines = text.Split('\n').ToList();
var withZero = lines.Select(
(line, i) =>
{
var newVal = i < 9 ? string.Format("0{0}", line) : line;
return newVal;
});
var result = string.Join("\n", withZero);
或者更简洁的形式:
var result = string.Join("\n", text.Split('\n').Select(
(line, i) =>
{
var newVal = i < 9 ? string.Format("0{0}", line) : line;
return newVal;
}));
可能有超过9行,您的代码将输出类似'011' – 2014-12-04 18:24:47
True,Vsevolod Goloviznin。这有10号或更高的错误输出。 – 2014-12-04 18:31:48
我的错误。代码示例现在将更改限制为前9行。 – PiotrWolkowski 2014-12-04 18:53:45
由于指标已经部分输入的数据,你需要从那里读取(并使用该索引)或从那里删除它(并使用Select
ing时可以得到的索引)。你可以使用正则表达式来解析它。索引分离后,可以使用.ToString("00")
添加前导零。
var regex = new Regex(@"^(\d+)(.*)$");
var result = string.Join("\r\n",
tb1.Text.Split(new[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries)
.Select(x =>
{
var m = regex.Match(x);
return int.Parse(m.Groups[1].Value).ToString("00") + m.Groups[2].Value;
}));
Debug.Assert("01ABC\r\n02ABC\r\n03ABC\r\n04ABC\r\n10ABC" == result);
[数字格式的可能重复:如何转换1至 “01”,2为 “02”,etc.?](http://stackoverflow.com/questions/5972949/number-formatting-how -to-convert-1-to-01-2-to-02-etc) – 2014-12-04 17:26:23
感谢Vsevolod Goloviznin的洞察力。我现在似乎有一个小问题。当我实现数字格式时,第一个数字现在是00而不是01. – 2014-12-04 18:22:53
这是因为c#中的索引从0开始。尝试向索引添加'1',然后调用ToString。 (索引+ 1).ToString(“D2”) – 2014-12-04 18:25:47