如何从随机匹配的字符串中排除不需要的匹配

时间:2015-05-21 16:08:03

标签: c# arrays

例如我有这样的代码。

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);

我想获得所有随机匹配但是从数组“不需要的”中排除两个变体。 (当然这只是一个例子,可能有更多的数组和可能的不匹配)。

这样做的好方法是什么?无论如何,我想保留获得所有结果的可能性的关键点。所以我想选择在一代之后排除东西,但不能让它无法生成“老儿子”。

2 个答案:

答案 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[][] blockedint[][] blocked,如果访问blocked[i][j],则i是当前单词和数组{{1} (或者单词本身)它是无法匹配的单词的索引(所有这些假设你可能有超过1个单词,你可能不想与当前单词匹配,只有一个一个简单的数组就足够了),然后你必须确保你使用的随机值不是那些被禁止的那个'。希望这有帮助