如何修改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

[数字格式的可能重复:如何转换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

+0

感谢Vsevolod Goloviznin的洞察力。我现在似乎有一个小问题。当我实现数字格式时,第一个数字现在是00而不是01. – 2014-12-04 18:22:53

+1

这是因为c#中的索引从0开始。尝试向索引添加'1',然后调用ToString。 (索引+ 1).ToString(“D2”) – 2014-12-04 18:25:47

如果你只是想在字符串中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; 
       })); 
+0

可能有超过9行,您的代码将输出类似'011' – 2014-12-04 18:24:47

+0

True,Vsevolod Goloviznin。这有10号或更高的错误输出。 – 2014-12-04 18:31:48

+0

我的错误。代码示例现在将更改限制为前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);