开发者

C# : How to get running combination from two List<String> based on a master list

开发者 https://www.devze.com 2023-02-01 00:03 出处:网络
Dear all , this is something like my previousquestion How to get moving combination from two List<String> in C#?

Dear all , this is something like my previous question How to get moving combination from two List<String> in C#?

I'm having a masterlist and two childlist like below

        List<String> MasterList = new List<string&开发者_StackOverflowgt; { "A", "B", "C", "D", "E" };
        List<String> ListOne = new List<string> { "A", "B", "C" };
        List<String> ListTwo = new List<String> { "B", "D" };

I just need to get the running combination from the above list for that i'm using like(previous question's answer(Thanks Danny Chen))

        List<String> Result = new List<string>();
        Result = ListOne.SelectMany((a, indexA) => ListTwo
                                    .Where((b, indexB) => ListTwo
                                    .Contains(a) ? !b.Equals(a) && indexB > indexA : 
                                    !b.Equals(a)).Select(b => string.Format("{0}-{1}", a, b))).ToList(); 

so the Result list will contain

        "A-B"
        "A-D"
        "B-D"
        "C-B"
        "C-D"

Now my problem is the sorting issue

In the above result the fourth entry is C-B but it should be B-C. Because in the MasterList the C is after B.

How to do this in my existing linq .

Please help me to do this.


Not really clear on the exact requirement here, so does the MasterList dictate which of the two items should appear first? What about the order of the X1-X2 list? i.e. should B-C appear before B-D because C appears before D in the MasterList?

Anyway, here's something that produces the result you've asked for so far:

List<String> MasterList = new List<string> { "A", "B", "C", "D", "E" };
List<String> ListOne = new List<string> { "A", "B", "C" };
List<String> ListTwo = new List<String> { "B", "D" };

ListOne.SelectMany(i => 
ListTwo.Where(i2 => i != i2)
       .Select(i2 => 
            {
                if (MasterList.IndexOf(i) < MasterList.IndexOf(i2))
                    return string.Format("{0}-{1}", i, i2);
                else
                    return string.Format("{0}-{1}", i2, i);
            }
       ));

outputs:

A-B
A-D
B-D
B-C
C-D
0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号