0

我有一个字符串列表

List<string> myList = new List<string>();

myList.Add(string1_1);
myList.Add(string1_2);
myList.Add(string2_1);
myList.Add(string2_2);
myList.Add(string3_1);
myList.Add(string3_2);

现在,经过一番魔术,我想组合 List 的元素,使它们像这样

myList[0] = string1_1 + string1_2
myList[1] = string2_1 + string2_2
myList[2] = string3_1 + string3_2

因此也将列表的大小减半。如何做到这一点?

4

3 回答 3

6

一个简单的 for 循环就可以了:

List<string> inputList = new List<string>();
List<string> outputList = new List<string>();

for (int i = 0; i < inputList.Count; i += 2) // assumes an even number of elements
{
    if (i == inputList.Count - 1)
        outputList.Add(inputList[i]); // add single value
        // OR use the continue or break keyword to do nothing if you want to ignore the uneven value.
    else
        outputList.Add(inputList[i] + inputList[i+1]); // add two values as a concatenated string
}

For 循环适用于一次循环和处理成对或三元组的元素。

于 2013-10-03T14:10:47.003 回答
6

我肯定会使用forTrevor 提供的循环方法,但如果你想使用 LINQ 来实现,你可以使用GroupByand string.Join

myList = myList.Select((x, i) => new { x, i })
               .GroupBy(x => x.i / 2)
               .Select(g => string.Join("", g.Select(x => x.x)))
               .ToList();
于 2013-10-03T14:16:10.380 回答
1

你可以尝试这样的事情:

var half = myList
           .Select((s,idx) => s + (idx < myList.Count() - 1 ? myList[idx +1] : string.Empty) )
           .Where((s,idx) => idx % 2 == 0)
           .ToList();

您可以以 string[i] + string[i+1] 形式对所有项目进行投影(注意检查 string[i+1] 元素是否存在):

.Select((s,idx) => s + (idx < myList.Count() - 1 ? myList[idx +1] : string.Empty) )

然后只过滤偶数元素:

.Where((s,idx) => idx % 2 == 0)
于 2013-10-03T14:12:02.420 回答