如何修改linq索引号

时间:2014-12-04 17:21:29

标签: c# linq

如何修改数组中的索引号,使其前面的数字为1 - 9。 但是,我希望数字10保持不变。

这是从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);

2 个答案:

答案 0 :(得分:1)

由于索引已经是输入数据的一部分,因此您需要从那里读取它(并使用该索引)或从那里删除它(并使用Select时可以获得的索引)。您可以使用正则表达式解析它。将索引隔离后,可以使用.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 :(得分:-1)

如果您只想在字符串中使用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;
                }));