例如我有这样的代码。
string[] person = new string[] { "Son", "Father", "Grandpa" };
string[] age = new string[] { "Young", "In his 40-s", "Old" };
string[] unwanted = new string { "Old Son", "Young GrandPa" };
Random X = new Random();
string Who = person[i.Next(0, person.Length)];
string HowOld = age[i.Next(0, age.Length)];
Console.WriteLine("{0} {1}", Who, HowOld);
我想获得所有随机匹配但是从数组“不需要的”中排除两个变体。 (当然这只是一个例子,可能有更多的数组和可能的不匹配)。
这样做的好方法是什么?无论如何,我想保留获得所有结果的可能性的关键点。所以我想选择在一代之后排除东西,但不能让它无法生成“老儿子”。
答案 0 :(得分:1)
首先,定义一个包含数组中两个值的类:
class PersonWithAge
{
public string Person { get; set; }
public string Age { get; set; }
}
接下来,使用LINQ生成Person和Age的所有可能组合:
// Create cross product
var results = (from x in person
from y in age
select new PersonWithAge{Person=x, Age=y}).ToList();
现在(如果需要)删除例外:
results.RemoveAll(n => n.Person == "Son" && n.Age == "Old"
|| n.Person == "Grandpa" && n.Age == "Young");
答案 1 :(得分:0)
如果你想阻止一些组合,我相信你可以有规则'对于无法匹配的对/组,例如string[][] blocked
或int[][] blocked
,如果访问blocked[i][j]
,则i
是当前单词和数组{{1} (或者单词本身)它是无法匹配的单词的索引(所有这些假设你可能有超过1个单词,你可能不想与当前单词匹配,只有一个一个简单的数组就足够了),然后你必须确保你使用的随机值不是那些被禁止的那个'。希望这有帮助