相同List <t> / Array元素的C#union </t>

时间:2013-10-15 12:38:48

标签: c# arrays list union

好的,这就是我现在遇到的问题:我希望将相同数组的元素相互统一。

例如:我有一个包含这些元素的数组“A”,“B”,“C”,“D”

我希望将它们统一起来(可能然后将它们放在另一个列表中),这样它就会变成:

A,B

A,C

A,d

B,C

B,d

C,d

到目前为止,我尝试过一个简单的for循环,但没有成功,也无法想到如何进一步解决这个问题。

到目前为止,我的尝试没有成功:

List<string> testList = new List<string>();
List<string> anotherList = new List<string>();

testList.AddRange(richTextBox1.Text.Split(','));
anotherList.ToArray();

for (int i = 0; i < testList.Count; i++) //no idea how to get the right count
{
    var union = testList[i].Union(testList[i+1]);

    foreach (char value in union)
    {
        richTextBox2.Text = value.ToString();
    }
}

感谢。

3 个答案:

答案 0 :(得分:3)

也许这个简单的查询有助于:

var query = from s1 in testList
        from s2 in testList.Skip(1)
        where string.Compare(s1 , s2) < 0
        select string.Format("{0},{1}", s1, s2);
testList = query.ToList();

答案 1 :(得分:0)

这对我来说可以很好地匹配你想要的输出

static List<string> list = new List<string> { "A", "B", "C", "D", "E" }; 
static List<string> finished = new List<string>(); 

public static void Main()
{
    for (int i = 0; i < list.Count - 1; i++)
        for (int j = i+1; j < list.Count; j++)
            finished.Add(list[i]+","+list[j]);
}

答案 2 :(得分:0)

这可能是一个很好的开始,可以找出&#34;正确的数量&#34; ..

http://en.wikipedia.org/wiki/Combination 无论如何... 你可以做类似的事情(PseudoCode):

List<string> unions = new List<string>();
foreach(string s1 in list1)
{
    foreach(string s2 in list2)
    {
        string union = s1+s2;
        if(!unions.Contains(union))
            unions.Add(union);
    }
}

foreach(string union in unions)
    Console.WriteLine(union);

你也可以使用其他方法使用LINQ的独特

LINQ: Distinct values