数组组合的数组

如何使用LinQ / C#生成相反值的各种组合我有一个数组中的运算符列表,如"> < = + ="我也有一个函数可以返回一个数组中每个项的相反值。相反的值">""<"等等。因此,考虑每个值的反向运算符如何生成各种可能的组合

示例:问题陈述:

 `string[] arrSample = new string[]{"!=","="};` //arrSample can be any object array with property values.The property can accept operator values like !=,=,>,< etc.. 

预期输出:考虑反向运算符的各种组合将是

 Output Sequence1: =,!= Output Sequence2: !=,= Output Sequence3: = , = Output Sequence4: !=,!= 

事实certificate这比看起来更难,但以下内容应certificate这一想法。

有两个步骤 – 创建每个运算符的数组列表对及其反向,然后递归地将它们置换在一起。

 void DoProblem() { //string[] arrSample = new string[] { "!=", "=" }; string[] arrSample = new string[] { "!=", "<","+" }; string[][] arrPairs = (from op in arrSample select new string[]{op, GetReverse(op)}).ToArray(); List myList = new List(); myList.AddRange(arrPairs); foreach (string x in Permute(0, myList)) { Console.WriteLine(x); } } List Permute(int a, List x) { List retval = new List(); if (a == x.Count) { retval.Add(""); return retval; } foreach (Object y in x[a]) { foreach (string x2 in Permute(a + 1, x)) { retval.Add(y.ToString() + "," + x2.ToString()); } } return retval; } string GetReverse(string op) { switch (op) { case "=": return "!="; case "!=": return "="; case "<": return ">"; case "+": return "-"; default: return ""; } } 

注意:置换函数基于置换数组的数组答案: C#排列的一组arraylists?

 from operator in arrSample select operator + "," + ReverseOperator(operator) 

还是我错过了什么?

你想要一个工会吗?

  string[] arrSample = new string[]{"!=","="}; var list = ( from item in arrSample select item + "," + item ).Union( from revItem in arrSample select revItem + "," + ReverseOperator(revItem) ); List final = new List(list); 

请找到具有不同组合的两个字符串数组的以下最简单方法

string [] roles = {“abc”,“e”,“f”,“h”};

string [] allRoles = {“a”,“b”,“c”,“abc”,“e”,“f”,“g”,“h”,“i”};

  foreach (string nextRole in allRoles) { if (Array.IndexOf(roles, nextRole) != -1) { Response.Write(nextRole + "
"); } }