从列表值创建对

时间:2012-10-01 00:25:54

标签: c# .net list

我有一个包含一些值的列表,比方说1 2 3 4 5 6

我需要像这样配对它们: 12 13 14 15 16 23 24 25 26 34 35 36 45 46 56

基本上,我需要将它们全部混合以创建独特的值集。

您对如何创建这样的新列表有任何想法吗?

感谢您的投入!

4 个答案:

答案 0 :(得分:5)

如果你喜欢Linq:

var ar = new int[] {1, 2, 3, 4, 5};

var combo = (from left in ar
            from right in ar where right > left 
            select new { left, right }).ToArray();

答案 1 :(得分:4)

使用Linq和元组:

var arr = new[] { 1, 2, 3, 4, 5, 6 };

arr.SelectMany((fst, i) => arr.Skip(i + 1).Select(snd => (fst, snd)));

答案 2 :(得分:2)

对于样本中的数据,您可以使用一对简单的嵌套循环来完成:

var list = new List<int>{1,2,3,4,5,6};
var res = new List<int>();
for (int i = 0 ; i != list.Count ; i++) {
    for (int j = i+1 ; j != list.Count ; j++) {
        res.Add(list[i]*10+list[j]);
    }
}

对于更复杂的数据,您可以使用字符串连接技巧:

var list = new List<int>{98,76,54,32,10};
var res = new List<int>();
for (int i = 0 ; i != list.Count ; i++) {
    for (int j = i+1 ; j != list.Count ; j++) {
        res.Add(int.Parse(string.Format("{0}{1}", list[i], list[j])));
    }
}

答案 3 :(得分:1)

var newList = new List<int>();
foreach(var i in originalList)
    for(int j = i + 1; j < originalList.Count; ++j)
        newList.Add(originalList[i] * 10 + originalList[j]);

应该有所帮助......